2009-07-03 12 views
6

In Python, usando calendar.timegm(), ottengo un risultato di 10 cifre per un timestamp unix. Quando lo metto nella funzione setTime() di Javscript, arriva una data nel 1970. Evidentemente ha bisogno di un timestamp unix lungo 13 cifre. Come può accadere? Stanno contando entrambi dalla stessa data?L'ora di Python Unix non funziona in Javascript

Come posso utilizzare lo stesso timestamp di unix tra queste due lingue?

In Python:

In [60]: parseddate.utctimetuple() 
Out[60]: (2009, 7, 17, 1, 21, 0, 4, 198, 0) 
In [61]: calendar.timegm(parseddate.utctimetuple()) 
Out[61]: 1247793660 

In Firebug:

>>> var d = new Date(); d.setTime(1247793660); d.toUTCString() 
"Thu, 15 Jan 1970 10:36:55 GMT" 
+0

c'è una ragione per cui non sta passando queste date in un formato oltre UTC (http://en.wikipedia.org/wiki/Coordinated_Universal_Time) ? – SingleNegationElimination

risposta

11

timegm si basa sul metodo di gmtime() di Unix, che restituiscono secondi dal 1 gennaio 1970.

Javascripts setTime() il metodo è millisecondo da quella data. Dovrai moltiplicare i tuoi secondi di tempo 1000 per convertirli nel formato previsto da Javascript.

2

Stai forse mescolando secondi-dal-1970 con millisecondi-dal-1970?

1

JavaScript Date constructor lavora con millisecondi, si dovrebbe moltiplicare il tempo di Python unix dal 1000.

var unixTimestampSeg = 1247793660; 
var date = new Date(unixTimestampSeg*1000); 
8

Ecco alcuni metodi Python che uso per convertire da e in javascript/datetime.

def to_datetime(js_timestamp): 
    return datetime.datetime.fromtimestamp(js_timestamp/1000) 

def js_timestamp_from_datetime(dt): 
    return 1000 * time.mktime(dt.timetuple()) 

in javascript si farebbe:

var dt = new Date(); 
dt.setTime(js_timestamp);