2013-10-16 14 views
5

Ich verwende moment.js mit Zeitzonen für die Datumsbearbeitung in einer Webapp. Ich speichere alle Daten in UTC und gebe sie als UTC zurück. Ich habe die Zeitzone des Benutzers. Ich möchte die UTC-Zeit in die lokale Benutzer-Zeitzone konvertieren.Ändern des Utc-Datums zum lokalen Datum mit moment.js

var timezone = "America/New_York"; 
var utcDate = "2013-10-16T10:31:59.0537721Z"; 

var localDate = moment(utcDate).utc().tz(timezone).format() 

Wenn ich versuche, dies zu tun, bekomme ich eine falsche Zeit. nicht sicher, wie mit Augenblick diese Funktion erhalten

Antwort

4

Sie können versuchen:

moment.utc(utcDate).tz(timezone).format() 

Aber es sollte keine Rolle spielen. Sie sollten beide produzieren: "2013-10-16T06:31:59-04:00".

Es funktioniert für mich, läuft auf Chrome 30, also ist es wahrscheinlich Browser bezogen.

Wenn Sie Moment.js 2.3.1 oder früher auf IE8 ausführen, ist dies ein Nebeneffekt des Problems #1175, das in 2.4.0 behoben wurde. Die Aktualisierung auf die neueste Version sollte das Problem lösen.

5

Verwenden Sie den + Operator Unix-Zeit zu erhalten, dann:

moment(+moment.utc(utcDate)) 

Wie es funktioniert:

  • moment.utc(String) analysiert die Zeichenfolge und gibt einen Moment Objekt UTC-Zeitzone eingestellt.
  • + kehrt das Unix für den Moment in Millisekunden versetzt obejct
  • moment(Number) erstellt ein neues Moment Objekt in dem lokalen Zeitzone des Benutzers, die in Unix bestanden mit Offset.
+1

ich diese Antwort upvoted weil Downvoting ohne Angabe von Gründen nutzlos ist. –

4

für alle das gleiche Problem:

Ihr Datum ISO-Format der Zeitzone enthalten soll. hier ist das Format von momentjs erlaubt:

YYYY-MMM-DDTHH:mm:ss+00:00 

Mitteilung der +00: 00 bedeutet es UTC

ist

Beispiel

moment('2014-10-03T09:31:18+00:00').format() 

"2014-10-03T17:31:18+08:00" 
0

Selbst wenn Sie don terturn wird kenne die Zeitzone nicht, bekommst du den Client Offset und verwendest so

let utcTime = "2017-02-02 08:00:13.567"; 
var offset = moment().utcOffset(); 
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT"); 

Versuchen Sie, diese JsFiddle

Verwandte Themen