Standardmäßig analysiert MomentJS die Ortszeit. Wenn nur eine Datumszeichenfolge (ohne Uhrzeit) angegeben wird, wird standardmäßig Mitternacht verwendet.
In Ihrem Code erstellen Sie ein lokales Datum und konvertieren es dann in die UTC-Zeitzone (tatsächlich wechselt die Momentinstanz in den UTC-Modus ). Wenn sie formatiert wird, wird sie (abhängig von Ihrer Ortszeit) vorwärts oder vorwärts verschoben rückwärts.
Wenn die lokale Zeitzone UTC + N ist (N ist eine positive Zahl) und Sie eine Nur-Datum-Zeichenfolge analysieren, erhalten Sie das vorherige Datum.
Hier einige Beispiele zur Veranschaulichung (mein lokaler Zeitversatz ist UTC + 3 während der Sommerzeit):
>>> moment('07-18-2013', 'MM-DD-YYYY').utc().format("YYYY-MM-DD HH:mm")
"2013-07-17 21:00"
>>> moment('07-18-2013 12:00', 'MM-DD-YYYY HH:mm').utc().format("YYYY-MM-DD HH:mm")
"2013-07-18 09:00"
>>> Date()
"Thu Jul 25 2013 14:28:45 GMT+0300 (Jerusalem Daylight Time)"
Wenn Sie möchten, dass die Datums- / Uhrzeitzeichenfolge als UTC interpretiert wird, sollten Sie dies explizit angeben:
>>> moment(new Date('07-18-2013 UTC')).utc().format("YYYY-MM-DD HH:mm")
"2013-07-18 00:00"
oder, wie Matt Johnson in seiner Antwort erwähnt, können ( und sollten ) Sie es zunächst als UTC-Datum analysieren moment.utc()
und die Formatzeichenfolge als zweites Argument einschließen, um Mehrdeutigkeiten zu vermeiden.
>>> moment.utc('07-18-2013', 'MM-DD-YYYY').format("YYYY-MM-DD HH:mm")
"2013-07-18 00:00"
Um umgekehrt ein UTC-Datum in ein lokales Datum umzuwandeln, können Sie die folgende local()
Methode verwenden:
>>> moment.utc('07-18-2013', 'MM-DD-YYYY').local().format("YYYY-MM-DD HH:mm")
"2013-07-18 03:00"
toString()
nachformat()
(es bereits einen String zurückgibt).