Hier sind ein paar Dinge falsch:
Erstens Terminologie. "Epoche" bezieht sich auf den Ausgangspunkt von etwas. Die "Unix-Epoche" ist Mitternacht, 1. Januar 1970 UTC. Sie können keine beliebige "Datumszeichenfolge in Epoche" konvertieren. Sie meinten wahrscheinlich "Unix Time" , was fälschlicherweise oft als "Epoch Time" bezeichnet wird.
.unix()
Gibt die Unix-Zeit in ganzen Sekunden zurück, aber der Standardkonstruktor moment
akzeptiert einen Zeitstempel in Millisekunden . Sie sollten stattdessen verwenden .valueOf()
, um Millisekunden zurückzugeben. Beachten Sie, dass das Aufrufen .unix()*1000
ebenfalls funktionieren würde, jedoch zu einem Genauigkeitsverlust führen würde.
Sie analysieren eine Zeichenfolge, ohne einen Formatbezeichner anzugeben. Das ist keine gute Idee, da Werte wie 1/2/2014 je nach Gebietsschema, in dem der Code ausgeführt wird, entweder als 1. Februar oder als 2. Januar interpretiert werden können. (Aus diesem Grund wird in der Konsole auch die Warnung "Veraltet" angezeigt.) Geben Sie stattdessen eine Formatzeichenfolge an , die der erwarteten Eingabe entspricht, z.
moment("10/15/2014 9:00", "M/D/YYYY H:mm")
.calendar()
hat eine sehr spezifische Verwendung. Wenn Sie sich dem Datum nähern, wird ein Wert wie "Heute 9:00 Uhr" zurückgegeben. Wenn Sie dies nicht erwartet haben, sollten Sie .format()
stattdessen die Funktion verwenden. Auch hier möchten Sie möglicherweise einen Formatbezeichner übergeben.
Um Ihre Fragen in Kommentaren zu beantworten, Nein - Sie müssen nicht anrufen .local()
oder .utc()
.
Alles zusammen:
var ts = moment("10/15/2014 9:00", "M/D/YYYY H:mm").valueOf();
var m = moment(ts);
var s = m.format("M/D/YYYY H:mm");
alert("Values are: ts = " + ts + ", s = " + s);
Auf meinem Computer in der Zeitzone US-Pazifik ergibt sich Folgendes:
Werte sind: ts = 1413388800000, s = 15.10.2014 9:00
Da der Eingabewert als Ortszeit interpretiert wird, erhalten Sie einen anderen Wert, ts
wenn Sie sich in einer anderen Zeitzone befinden.
Beachten Sie auch, dass, wenn Sie wirklich mit ganzen Sekunden arbeiten möchten (möglicherweise an Präzision verlieren), der Moment auch Methoden dafür hat. Sie würden verwenden .unix()
, um den Zeitstempel in ganzen Sekunden zurückzugeben und moment.unix(ts)
ihn auf einen Moment zurück zu analysieren.
var ts = moment("10/15/2014 9:00", "M/D/YYYY H:mm").unix();
var m = moment.unix(ts);