2016-06-03 14 views
1

Ich verwende moment.js, um einen UTC-Datumsoffset zu erhalten.Welches Datumsformat wird in moment.js verwendet?

Ich habe den folgenden Code, der mir den Offset gibt, aber ich bekomme die Warnung "Deprecation warning: moment construction falls back to js Date".

var s = booking.booking_date_time.toString(); 
console.log(moment(s).parseZone(s).utcOffset()); 

s Die obige Variable auf "Mon Jun 13 2016 08:00:00 GMT+1000 (AUS Eastern Standard Time)" eingestellt.

Ich weiß, dass um die Fahrt der Warnung zu bekommen, muss ich das Datumsformat im Moment angeben, aber ich bin mir nicht sicher, was das Datumsformat sein sollte. Ich habe dieses Format "EEE MMM dd yyyy HH:mm:ss ZZ" versucht, aber das funktioniert nicht.

+0

unterstützt zu ändern, wie etwa den umgekehrten Weg nehmen, Formatierung der * Strom * Zeit bis es aussieht nahe genug an das Format von deiner Eingabe? – noisypixy

+1

Ist 'booking.booking_date_time' ein' Date'-Objekt? Wenn ja, gib es einfach direkt an den Moment weiter. Es gibt keine Notwendigkeit, Strings zu durchlaufen. –

Antwort

1

Wie in dem doc angegeben: -

Wenn Sie einen Moment aus einem String erstellen, prüfen wir zuerst, wenn die Zeichenfolge Streichhölzer ISO 8601-Formate bekannt, dann auf neues Datum zurückgreifen (string), wenn ein bekanntes Format wurde nicht gefunden.

Also ich schlage vor, Sie verwenden moment(new Date(booking.booking_date_time)), die funktionieren wird. (Wenn booking.booking_date_time ist ein gültiges Datum Objekt)

Auch moment-format beziehen sich auf verschiedene Formate von moment.js

+0

Das Analysieren von Daten über das Objekt "Date" ist unzuverlässig, und die vorgeschlagene Vorgehensweise besteht darin, auch das Format "TTM MMM TT JJJJ HH: MM: ss [GMT] ZZ" zu übergeben, wie unten von Maggie vorgeschlagen. Weitere Informationen zu den Inkonsistenzen bei der Syntax "Datum" finden Sie hier (https://github.com/moment/moment/issues/1407#issuecomment-155630060). –

+0

@AngelaNicholas Warum ist die Analyse von Datumsangaben über das Date-Objekt unzuverlässig? – Shrabanee

+0

Die Erklärung ist in dem Hyperlink oben (https://github.com/moment/moment/issues/1407#issuecomment-155630060); Hier ist das relevante Zitat - "Parsen von Daten über das Date-Objekt ist unzuverlässig und inkonsistent über Plattformen hinweg. Es gibt verschiedene Implementierungen und unterschiedliche Verhaltensweisen. Manchmal können Sie lokale Zeit bekommen. Manchmal erhalten Sie UTC. Manchmal können Sie ungültiges Datum bekommen In der Nähe von DST-Übergängen werden andere Ergebnisse angezeigt. Versuchen Sie nicht, den Fehler zu beheben. Folgen Sie stattdessen unseren Richtlinien. Verwenden Sie entweder ein bekanntes Format oder geben Sie eine Formatzeichenfolge ein. " –

2

Moment verwendet einen eigenen Parset Token, der nicht mit anderen Bibliotheken übereinstimmt. Daher haben Sie hier einige falsche Token. Außerdem müssen Sie angeben, dass sich GMT in der Zeichenfolge befindet, aber es mit [] ausschließen.

Alle zusammengefasst:

moment('Mon Jun 13 2016 08:00:00 GMT+1000', 'ddd MMM DD YYYY HH:mm:ss [GMT]ZZ').format() 
"2016-06-12T17:00:00-05:00" 

Beachten Sie, wenn Sie den Standard Moment Konstruktor analysieren verwenden, ist es von der auf die Ortszeit des Benutzers angegebene Offset konvertieren.

Wenn Sie eine feste halten wollen Offset verwenden parseZone:

moment.parseZone('Mon Jun 13 2016 08:00:00 GMT+1000', 'ddd MMM DD YYYY HH:mm:ss [GMT]ZZ').format() 
"2016-06-13T08:00:00+10:00" 

Edit: Aufmerksamkeit auf den Kommentar bezahlen. Wenn es ein Datum ist, geben Sie es einfach direkt weiter. Ich hätte das bemerken sollen.

Verwandte Themen