2013-08-02 7 views
15

Ich habe einen Web-Service, ein Datum wie die folgende Zeichenfolge zurückgibt:Moment.js und Unix Epoch Conversion

/Date(1377907200000)/

ich MomentJS, dies zu einem moment Objekt zu analysieren.

moment("/Date(1377907200000)/") =>Fri Aug 30 2013 20:00:00 GMT-0400

Das alles ist in Ordnung. Aber wenn ich unix() auf dem Objekt anrufe, bekomme ich den Wert 1377907200. Dies entspricht jedoch Fri Jan 16 1970 17:45:07 GMT-0500. Ich könnte einfach den Wert multiplizieren, der von unix() zurückgegeben wird, aber das scheint schlampig zu mir. Ich vermute, dass das, was ich mache, indem ich unix() anrufe, nicht genau das ist, was ich denke, dass es ist. Muss ich beim Aufruf von unix() eine Art von Format angeben? Was fehlt mir hier?

JSFidle showing the conversion to moment and then back.

+0

Sie müssen nicht in das Datum Objekt auf diese Weise konvertieren, Moment kann 'Moment (1377907200000)' gut behandeln. Neugierig, warum der Web-Service das Datum als solches zurückgibt. – mix3d

+0

Wir verwenden einen Web-Service, der es ebenfalls zurückgibt. Dies liegt daran, dass der Zielkonsument der API normalerweise JavaScript ist, das "von Epoch in Millisekunden" anstatt von Sekunden ausführt. Es richtet sich an den wahrscheinlichsten Verbraucher. –

Antwort

48

Die Antwort, die von meagar zur Verfügung gestellt wird, ist korrekt, von streng einer JavaScript/Unix Zeitperspektive. Wenn Sie jedoch einfach mit 1000 multiplizieren, verlieren Sie jede Genauigkeit in einer Sekunde, die in Ihren Daten vorhanden sein könnte.

Moment.js bietet zwei verschiedene Methoden, wie beschrieben in the docs. .unix() gibt den Wert in Sekunden zurück. Es teilt sich effektiv durch 1000 und schneidet alle Dezimalstellen ab. Sie möchten die Methode .valueOf() verwenden, die die Millisekunden ohne Änderung zurückgibt.

+1

Danke für die zusätzlichen Details. Zumindest für diesen Artikel wäre das nicht nötig, da die Granularität nur zu einem Tag ist. –

+0

Oh, eigentlich, ich sehe, das gibt genau das, was ich erwartet habe. Ich würde den Wert lieber nicht ändern, also ist Ihre Antwort in der Tat ideal. –

+0

Sorry, meagar .. –

10

In JavaScript Land, wenn Sie ein Date in einer ganzen Zahl konvertieren, erhalten Sie eine Reihe von Milli Sekunden seit der UNIX-Epoche. Traditionelle Unix-Zeit ist die Anzahl der Sekunden seit der Epoche. Multiplikation mit 1000 ist die richtige Option.

+0

Das macht Sinn. Danke für die Erklärung. –

+3

Oder einfach "moment ("/Date (1377907200000)/"). ToDate(). GetTime()' –