931 Stimmen

Moment.js in ein Datumobjekt umwandeln.

Mit Moment.js kann ich kein korrektes Moment-Objekt in ein Datum-Objekt mit Zeitzonen umwandeln. Ich kann das korrekte Datum nicht erhalten.

Beispiel:

var oldDate = new Date(),
    momentObj = moment(oldDate).tz("MST7MDT"),
    newDate = momentObj.toDate();
console.log("Startdatum " + oldDate)
console.log("Format von Moment mit Offset " + momentObj.format())
console.log("Format von Moment ohne Offset " + momentObj.utc().format())
console.log("(Datum-Objekt) Zeit mit Offset " + newDate)
console.log("(Datum-Objekt) Zeit ohne Offset "+ moment.utc(newDate).toDate())

1631voto

Chandrew Punkte 16437

Verwenden Sie dies, um ein Moment-Objekt in ein Datum-Objekt zu transformieren:

Von http://momentjs.com/docs/#/displaying/as-javascript-date/

moment().toDate();

Erzeugt:

Di Nov 04 2014 14:04:01 GMT-0600 (CST)

68voto

Matt Johnson-Pint Punkte 212496

Sobald Sie moment-timezone mit den Daten initialisiert haben, die Sie möchten, funktioniert Ihr Code wie erwartet.

Sie konvertieren das Moment korrekt in die Zeitzone, was sich in der zweiten Zeile des Ausgabe von momentObj.format() widerspiegelt.

Der Wechsel zu UTC lässt nicht einfach den Offset fallen, sondern wechselt zurück zur UTC-Zeitzone. Wenn Sie das tun möchten, benötigen Sie den ursprünglichen .tz() Aufruf überhaupt nicht. Sie könnten einfach moment.utc() verwenden.

Vielleicht möchten Sie nur das Ausgabeformat ändern? In diesem Fall geben Sie einfach die Parameter an, die Sie der format Methode übergeben möchten:

momentObj.format("YYYY-MM-DD HH:mm:ss")

Bezüglich der letzten beiden Zeilen Ihres Codes - wenn Sie zu einem Date-Objekt zurückkehren using toDate(), geben Sie das Verhalten von moment.js auf und kehren zum Verhalten von JavaScript zurück. Ein JavaScript Date-Objekt wird immer in der lokalen Zeitzone des Computers, auf dem es läuft, gedruckt. Da kann moment.js nichts dran ändern.

Ein paar andere Kleinigkeiten:

  • Obwohl der Moment-Konstruktor ein Date akzeptieren kann, ist es in der Regel am besten, keinen zu verwenden. Für "jetzt" verwenden Sie nicht moment(new Date()). Verwenden Sie stattdessen einfach moment(). Beides funktioniert, aber es ist unnötig redundant. Wenn Sie aus einem String parsen, geben Sie diesen String direkt an moment. Versuchen Sie nicht, ihn zuerst zu einem Date zu parsen. Sie werden feststellen, dass moments Parser viel zuverlässiger ist.

  • Zeitzonen wie MST7MDT sind aus Gründen der Abwärtskompatibilität vorhanden. Sie stammen aus POSIX-Stil-Zeitzonenund nur wenige von ihnen sind in den TZDB-Daten enthalten. Falls nicht absolut erforderlich, sollten Sie einen Schlüssel wie America/Denver verwenden.

30voto

Mawaheb Punkte 762

.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"))

Ich hoffe, das hilft

25voto

Da momentjs keine Kontrolle über das JavaScript-Datumsobjekt hat, habe ich einen Workaround gefunden.

const currentTime = new Date();    
const convertTime = moment(currentTime).tz(timezone).format("YYYY-MM-DD HH:mm:ss");
const convertTimeObject = new Date(convertTime);

Dies gibt Ihnen ein JavaScript-Datumsobjekt mit der konvertierten Zeit

15voto

Die Frage ist ein wenig unklar. Ich werde mein Bestes geben, um dies zu erklären. Zuerst sollten Sie verstehen, wie man moment-timezone benutzt. Gemäß dieser Antwort hier TypeError: moment().tz ist keine Funktion, müssen Sie moment von moment-timezone importieren, anstatt von dem Standardmoment (natürlich müssen Sie zuerst moment-timezone per npm installieren!). Für die Klarheit,

const moment=require('moment-timezone')//importiere aus moment-timezone

Jetzt, um die Zeitzonenfunktion zu nutzen, verwenden Sie moment.tz("Datumsschnur/moment()","Zeitzone") (besuchen Sie https://momentjs.com/timezone/ für weitere Details). Diese Funktion gibt ein Moment-Objekt mit einer bestimmten Zeitzone zurück. Für die Klarheit,

var newYork= moment.tz("2014-06-01 12:00", "America/New_York");/* dieser Code betrachtet New York als Zeitzonen.*/

Wenn Sie nun versuchen, newYork (das Moment-Objekt) mit moments toDate() (ISO 8601 Formatkonvertierung) umzuwandeln, erhalten Sie die Zeit von Greenwich, UK. Für weitere Details lesen Sie diesen Artikel https://www.nhc.noaa.gov/aboututc.shtml, über UTC. Wenn Sie jedoch nur Ihre lokale Zeit in diesem Format möchten (New Yorker Zeit, gemäß dieses Beispiels), fügen Sie einfach die Methode .utc(true) hinzu, mit dem arg true, zu Ihrem Moment-Objekt. Für die Klarheit,

newYork.toDate()// wird Ihnen die Zeit von Greenwich, UK, geben.

newYork.utc(true).toDate()// gibt Ihnen die lokale Zeit. Gemäß des Arguments, das wir oben für die moment.tz Methode spezifiziert haben, ist es 12:00. Sie können dies natürlich mit moment() ändern.

Kurz gesagt, moment.tz berücksichtigt die von Ihnen angegebene Zeitzone und vergleicht Ihre lokale Zeit mit der Zeit in Greenwich, um Ihnen ein Ergebnis zu liefern. Ich hoffe, das war hilfreich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X