2016-04-27 9 views
0

Ich habe lokale Zeit in mongodb gespeichert z. "2016-04-25T09: 30: 00.000Z" Es wird als 'UTC' (Z am Ende) gespeichert, aber in Wirklichkeit ist es wörtliche Darstellung der lokalen Zeit. Ich habe auch Zeitzone gespeichert, z.B. "Europa/London", also habe ich alle Informationen, die ich in die richtige Zeit umwandeln muss.Wie lokale Zeit, die als UTC gespeichert wird, in den tatsächlichen korrekten UTC-Wert konvertiert werden

In dieser Ursache sollte Ergebnis "2016-04-25T08: 30: 00.000Z" sein, aber ich kann nicht den Weg finden, wie es geht. Ich habe Zeitzone versucht.

Antwort

0

Es gefunden!

var start = "2016-04-25T09:30:00.000Z"; 
var timezone = 'Europe/London'; 
var mZoned = moment.tz(start, timezone); 
var mStart = moment.utc(start); 
var correctedStart = moment.utc(1000*(mStart.unix() - (mZoned.utcOffset()*60))); 
2

Es gibt einen viel einfacheren und weniger fehleranfälligen Weg als das, was Sie dort haben. Einfach das Datum analysieren mit einem Format, das die Z am Ende ignoriert:

moment.tz("2016-04-25T09:30:00.000Z", 'YYYY-MM-DDTHH:mm:ss:SSS', 'Europe/London').format() 
"2016-04-25T09:30:00+01:00" 

Das Datum korrekt analysiert wurde, ist das UTC-Datum immer so einfach wie der Aufruf von .toISOString()

moment.tz("2016-04-25T09:30:00.000Z", 'YYYY-MM-DDTHH:mm:ss:SSS', 'Europe/London').toISOString() 
"2016-04-25T08:30:00.000Z" 

Hinweis dass, wenn das ein lokales Datum ist, unabhängig von Zeitzone, können Sie die Zeitzone Kennung weglassen und nur die lokale Browser-Zeit verwenden:

moment("2016-04-25T09:30:00.000Z", 'YYYY-MM-DDTHH:mm:ss:SSS').format() 
"2016-04-25T09:30:00-05:00" 

Aber ich denke, du bist mit Knoten, so dass der zweite wahrscheinlich nicht das ist, was Sie wollen.

+0

Danke für den Tipp @Maggie! – matus

1

Ich glaube, dass das Problem das Format ist, das 000Z Zone für Moment lib angibt. Es heißt, dass es bereits UTC 0 ist und timezone = 'Europe/London' wird in diesem Fall ignoriert.

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

funktioniert ordnungsgemäß mit dem Datumsformat "2016-04-25T09:30:00". Check out runnable version here