Mit Moment.js kann ich ein korrektes Moment-Objekt nicht in ein Datumsobjekt mit Zeitzonen umwandeln. Ich kann nicht das richtige Datum erhalten.
Beispiel:
var oldDate = new Date(),
momentObj = moment(oldDate).tz("MST7MDT"),
newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())
Verwenden Sie dies, um ein Moment-Objekt in ein Datums-Objekt umzuwandeln:
Von http://momentjs.com/docs/#/displaying/as-javascript-date/
moment().toDate();
Ausbeuten:
Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
Solange Sie moment-timezone mit den Daten für die gewünschten Zonen initialisiert haben, funktioniert Ihr Code wie erwartet.
Sie konvertieren den Zeitpunkt korrekt in die Zeitzone, was sich in der zweiten Zeile der Ausgabe von momentObj.format()
widerspiegelt.
Die Umstellung auf UTC lässt nicht nur den Offset weg, sondern wechselt zurück zur UTC-Zeitzone. Wenn Sie das tun, brauchen Sie den ursprünglichen .tz()
-Aufruf überhaupt nicht. Sie könnten einfach moment.utc()
verwenden.
Vielleicht versuchen Sie auch nur, das Ausgabeformat zu ändern? Wenn ja, geben Sie einfach die gewünschten Parameter für die Methode "format" an:
momentObj.format("YYYY-MM-DD HH:mm:ss")
Zu den letzten zwei Zeilen Ihres Codes: Wenn Sie mit "toDate()" zu einem "Date"-Objekt zurückkehren, geben Sie das Verhalten von moment.js auf und kehren zum Verhalten von JavaScript zurück. Ein JavaScript-Objekt Date
wird immer in der lokalen Zeitzone des Computers ausgegeben, auf dem es läuft. Daran kann moment.js nichts ändern.
Ein paar andere kleine Dinge:
Während der moment-Konstruktor ein Date
annehmen kann, ist es normalerweise am besten, keines zu verwenden. Verwenden Sie für "now" nicht moment(new Date())
. Verwenden Sie stattdessen einfach Moment()
. Beides wird funktionieren, aber es ist unnötig redundant. Wenn Sie eine Zeichenkette parsen, übergeben Sie diese Zeichenkette direkt an moment. Versuchen Sie nicht, ihn zuerst in ein Date
zu parsen. Sie werden feststellen, dass der Parser von moment viel zuverlässiger ist.
Zeitzonen wie MST7MDT
sind aus Gründen der Abwärtskompatibilität vorhanden. Sie stammen von Zeitzonen im POSIX-Stil ab, und nur wenige von ihnen sind in den TZDB-Daten enthalten. Wenn es nicht unbedingt notwendig ist, sollten Sie einen Schlüssel wie America/Denver
verwenden.
.toDate" hat bei mir nicht wirklich funktioniert, also habe ich folgendes gemacht:
futureStartAtDate = new Date(moment().locale("en").add(1, 'd').format("MMM DD, YYYY HH:MM"))
hoffe das hilft