2009-07-03 13 views
6

En Python, usando calendar.timegm(), obtengo un resultado de 10 dígitos para una marca de tiempo de Unix. Cuando pongo esto en la función setTime() de Javscript, aparece una fecha en 1970. Evidentemente, necesita una marca de tiempo Unix de 13 dígitos. ¿Cómo puede pasar esto? ¿Ambos están contando desde la misma fecha?El tiempo de Python Unix no funciona en Javascript

¿Cómo puedo utilizar la misma marca de tiempo de unix entre estos dos idiomas?

En 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 

En Firebug:

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

¿Existe una razón por la que no está de paso estas fechas en un formato además de UTC (http://en.wikipedia.org/wiki/Coordinated_Universal_Time) ? – SingleNegationElimination

Respuesta

11

timegm está basado en el método gmtime() de Unix, que devuelven segundos desde el 1 de enero de 1970.

Javascripts setTime() método es milisegundos desde esa fecha. Tendrá que multiplicar sus segundos por 1000 para convertir al formato esperado por Javascript.

2

¿Está posiblemente mezclar segundos-Since 1970 con milisegundos-Since 1970?

1

JavaScript Date constructor trabaja con milisegundos, se debe multiplicar el tiempo de Python UNIX 1000.

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

Aquí hay un par de métodos de python que uso para convertir ay desde 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()) 

en JavaScript que haría:

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