Aktualisierung des Zeitoffsets mit Moment (). utcOffset ()

8

Ich stehe vor dem Problem, moment.js für den Umgang mit Zeitversätzen zu verwenden.

Ich sammle in einer versteckten Eingabe die lokale Benutzerzeitverschiebung:

%Vor%

Der Offset wird richtig gespeichert (in meinem Fall ist der Wert -240). Später auf der Serverseite (die in utc Zeit läuft) versuche ich einige db gespeicherte utcDate zu aktualisieren, indem ich etwas wie folgt mache:

%Vor%

Mein Problem ist folgendes: Wenn ich meinen Code wie oben beschrieben ausführen bekomme ich keine Effekte:

  • utcDate: 20151001 012421 +0000
  • userDate: 20151001 012421 +0000

Wenn ich das Offset-Zeichen umblättere, bekomme ich:

  • utcDate: 20151001 012421 +0000
  • userDate: 20151001 052421 +0400

Ich mache eindeutig etwas falsch (auch wenn meine Erwartung war, dass die erste Version korrekt war), haben Sie einen Hinweis?

Auf der Client-Seite verwende ich moment.js v2.10.6 auf der serverseitigen Moment-Zeitzone.js v0.4.0 und moment.js v2.10.6

    
Pierluigi 01.10.2015, 01:42
quelle

1 Antwort

11

Das Hauptproblem besteht darin, dass Sie den Offset als Zeichenfolge anstelle einer Zahl übergeben.

%Vor%

Wenn Sie einen Offset in Minuten haben, müssen Sie das numerische Formular verwenden. Sie können es immer konvertieren:

%Vor%

Moment ermöglicht, dass Offsets als Strings übergeben werden, erwartet jedoch, dass sie in einem der ISO8601-Formate vorliegen: entweder [+/-]HH:mm oder [+/-]HHmm .

%Vor%

Beachten Sie außerdem, dass ich moment.utc(...) verwendet habe, um die Eingabezeichenfolge zu analysieren. Sie haben gerade moment(...) verwendet, das die lokale -Zeitzone verwendet, es sei denn, die Zeitzone ist explizit oder wenn Sie ein Date -Objekt anstelle einer Zeichenfolge übergeben. Außerdem wird das moment -Objekt im "lokalen Modus" belassen, sodass Ihre utcDate -Ausgabe falsch ist, es sei denn, die Zeitzone des Computers wurde tatsächlich auf UTC gesetzt.

Vergessen Sie zum Schluss nicht "Zeitzone! = Offset". Sie können nicht davon ausgehen, dass der von Ihnen erhaltene Offset für alle Daten gültig ist. Wenn Sie ein Datum in die Zeitzone des Benutzers projizieren müssen, müssen Sie die Zeitzone kennen, z. B. America/New_York . Sie können diese mit dem Moment-Zeitzonen-Plugin verwenden.

    
Matt Johnson 01.10.2015, 17:49
quelle