2009-07-03 5 views
6

En Python, en utilisant calendar.timegm(), j'obtiens un résultat à 10 chiffres pour un horodatage unix. Quand je mets cela dans la fonction setTime() de Javscript, il arrive avec une date en 1970. Il a évidemment besoin d'un timestamp unix de 13 chiffres. Comment cela peut-il arriver? Sont-ils tous les deux à compter de la même date?Le temps Python Unix ne fonctionne pas en Javascript

Comment utiliser le même horodatage unix entre ces deux langues?

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

Y at-il une raison pour laquelle vous ne transmettaient pas ces dates dans un format en plus UTC (http://en.wikipedia.org/wiki/Coordinated_Universal_Time) ? – SingleNegationElimination

Répondre

11

timegm est basé sur la méthode Unix gmtime(), qui reviennent secondes depuis le 1er janvier 1970.

Javascripts setTime() La méthode est en millisecondes depuis cette date. Vous devrez multiplier vos secondes multipliées par 1000 pour convertir au format attendu par Javascript.

2

Êtes-vous peut-être mélanger de secondes depuis 1970 millisecondes depuis-1970?

1

JavaScript Date constructor fonctionne avec millisecondes, vous devez multiplier le temps unix Python par 1000.

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

Voici quelques méthodes python que j'utilise pour convertir depuis et vers 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()) 

javascript vous faites:

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