2016-05-20 29 views
0

Ich habe Daten in Mongodb im UTC-Format gespeichert, z. "2016-01-28T00: 00: 00.000Z". Im Client verwende ich moment.js, um das Datum zu formatieren. Allerdings, wenn ich einen Moment dieses besonderen Datums erstellt, Sommer ins Spiel kommt:UTC-Datum von verschiedenen Sommerzeiteinsparungen angepasst für die aktuelle Zeitzone

>moment("2016-01-28T00:00:00.000Z").format()

"2016-01-27T19: 00: 00-05: 00"

Wenn ich die Zeitzone des Moments verwende, um diese Zeit einzustellen, wird es nicht funktionieren, weil der Offset momentan -4 ist, nicht -5. Was ist der richtige Weg diese Zeit einzustellen, so dass ich statt 1/27/16 1/28/16 bekomme, was ich will. Im Moment eine Lösung, die ich allerdings von dem, was die .utcOffset in wenigen Minuten zu bekommen und fügen Sie diese zur Zeit meiner Zeit:

moment("2016-01-28T00:00:00.000Z").add( -moment("2016-01-28T00:00:00.000Z").utcOffset(),'minutes').format()

„2016-01-28T00: 00: 00-05: 00 "

Allerdings bin ich nicht sicher, ob dies der beste Weg ist, dies zu tun.

+0

Sie haben einen Offset in Ihrer Eingabe ('Z', was für UTC ist und äquivalent zu' +00: 00'). Sehen Sie sich die Antwort im dup-Post an, um zu verstehen, wie Sie die 'parseZone'-Funktion verwenden können, um sie beizubehalten, oder die' utc'-Funktion, um ausschließlich UTC zu verwenden. –

Antwort

0

Überprüfen Sie die Spezifikation für ISO 8601, speziell die Zeitzonenbezeichner umgibt.

Das "Z" am Ende der formatierten Eingabezeichenfolge gibt die Nummer in der UTC-Zeitzone an. Die Bibliothek moment nimmt das UTC-Datum und konvertiert es automatisch in die lokale Zeitzone, was in Ihrem Fall bedeutet, dass Sie einige Stunden davon abziehen.

Wenn Sie das "Z" deaktivieren, interpretiert moment es als "unspezifizierte" Zeitzone und addiert oder subtrahiert keine Zeit vom angegebenen Datum. So beachten Sie:

> moment("2016-01-28T00:00:00.000Z").format() 
< "2016-01-27T19:00:00-05:00" 
> moment("2016-01-28T00:00:00.000").format() 
< "2016-01-28T00:00:00-05:00" 

Nach dem „Z“ zu entfernen, wird moment noch formatiert das neue Datum mit -05:00 als der Zeitzone Bezeichner, aber nicht die Datumzeit ändern.

+0

Sorry, aber das ist keine gute Idee. Während es den gleichen * lokalen Zeit * Wert geben kann, haben Sie tatsächlich die Absicht des Zeitstempels geändert, indem Sie ihn zu einem anderen Zeitpunkt einfügen. Siehe die Antwort im Dup-Link für den richtigen Ansatz. –