Mit Moment.js kann ich ein korrektes Momentobjekt nicht in ein Datumsobjekt mit Zeitzonen umwandeln. Ich kann das richtige Datum nicht bekommen.
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())
javascript
momentjs
vadim.zhiltsov
quelle
quelle
Wednesday 24th 2019, 12:47:48 am
ist das möglich in umzuwandeln2019-04-23T19:17:48.000Z
? @ vadim.zhiltsov.tz("MST7MDT")
. Aus diesem Grund gibt es Bibliotheken wie moment.tz, um die Bare-Bones-Fähigkeit des integrierten Date-Objekts zu ergänzen, das nur UTC und die Host-Zeitzone versteht.Antworten:
Verwenden Sie diese Option, um ein Momentobjekt in ein Datumsobjekt umzuwandeln:
Von http://momentjs.com/docs/#/displaying/as-javascript-date/
Ausbeuten:
quelle
toDate
ist in der Tat, wie man einDate
Objekt von einem erhältmoment
. Der Code im Hauptteil der Frage fragt jedoch nach der Zeitzonenkonvertierung - wasDate
nicht möglich ist. Wenn die Bergzeit nicht tatsächlich die Zeitzone des Benutzers ist, bin ich mir nicht sicher, wie dies die Frage beantwortet hat.moment("12/12/2011")
wenn Sie eine Zeichenfolge an den Momentkonstruktor übergeben, erhalten Sie diese Nachricht. Es hat nichts damit zu tun, von Moment zu Tag zu gehen, objmoment().toDate()
Solange Sie die Moment-Zeitzone mit den Daten für die gewünschten Zonen initialisiert haben , funktioniert Ihr Code wie erwartet.
Sie konvertieren den Moment korrekt in die Zeitzone, die sich in der zweiten Ausgabezeile von widerspiegelt
momentObj.format()
.Durch das Umschalten auf UTC wird nicht nur der Offset gelöscht, sondern auch in die UTC-Zeitzone zurückgesetzt. Wenn Sie das tun, brauchen Sie den ursprünglichen
.tz()
Anruf überhaupt nicht. Du könntest es einfach tunmoment.utc()
.Vielleicht versuchen Sie nur, die Ausgabeformatzeichenfolge zu ändern? Wenn ja, geben Sie einfach die gewünschten Parameter für die
format
Methode an:In Bezug auf die letzten Zeilen Ihres Codes: Wenn Sie mit zu einem
Date
Objekt zurückkehrentoDate()
, 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 gedruckt, auf dem es ausgeführt wird. Es gibt nichts, was moment.js dagegen tun kann.Ein paar andere kleine Dinge:
Während der Moment, in dem der Konstruktor a ausführen kann ,
Date
ist es normalerweise am besten, keinen zu verwenden. Für "jetzt" nicht verwendenmoment(new Date())
. Verwenden Sie stattdessen einfachmoment()
. Beides wird funktionieren, ist aber unnötig redundant. Wenn Sie aus einer Zeichenfolge analysieren, übergeben Sie diese Zeichenfolge direkt an moment. Versuchen Sie nicht, es auf eineDate
erste zu analysieren . 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 aus Zeitzonen im POSIX-Stil, und nur wenige davon befinden sich in den TZDB-Daten. Sofern nicht unbedingt erforderlich, sollten Sie einen Schlüssel wie zAmerica/Denver
.quelle
.toDate()
. 2) Verwenden Sie keine Kommentare, um neue Fragen zu stellen. Dafür ist der große "Frage stellen" -Button gedacht..toDate
hat nicht wirklich für mich gearbeitet, also, hier ist was ich getan habe:hoffe das hilft
quelle
moment().add(1, 'd').toDate()
.Da momentjs keine Kontrolle über das Javascript-Datumsobjekt hat, habe ich eine Lösung dafür gefunden.
Dadurch erhalten Sie ein Javascript-Datumsobjekt mit der konvertierten Zeit
quelle
Ich musste Zeitzoneninformationen in meiner Datumszeichenfolge haben. Ich habe ursprünglich verwendet,
moment.tz(dateStr, 'America/New_York').toString();
aber dann bekam ich Fehler beim Zurückführen dieser Zeichenfolge in den Moment.Ich habe es versucht,
moment.tz(dateStr, 'America/New_York').toDate();
aber dann habe ich Zeitzoneninformationen verloren, die ich brauchte.Die einzige Lösung, die eine verwendbare Datumszeichenfolge mit Zeitzone zurückgab , die in den Moment zurückgeführt werden konnte, war
moment.tz(dateStr, 'America/New_York').format();
quelle
schön und sauber!!!!
quelle
So konvertieren Sie ein beliebiges Datum, z. B. utc:
quelle
moment().utc()
Gibt Werte für UTC zurück und gibt dann.format( "YYYY-MM-DD HH:mm:ss" )
eine Zeichenfolge zurück, die ohne Zeitzonenversatz auf UTC gesetzt wurde und daher als lokal analysiert wird. Es stimmt nicht mit einem Standard-Moment-Format überein und wird daher vom integrierten Parser analysiert. Es stimmt auch nicht mit einem von ECMAScript unterstützten Format überein, daher ist das Parsen von der Implementierung abhängig. Auf jeden Fall wird es als lokal analysiert, sodass der Zeitzonenversatz beim Erstellen des Zeitwerts des Datums erneut angewendet wird.Die Frage ist etwas dunkel. Ich werde mein Bestes geben, um dies zu erklären. Zuerst sollten Sie verstehen, wie man die Moment-Zeitzone verwendet . Entsprechend dieser Antwort hier ist TypeError: moment (). Tz keine Funktion , Sie müssen den Moment aus der Moment-Zeitzone anstelle des Standard-Moments importieren (natürlich müssen Sie zuerst die Moment-Zeitzone npm installieren!). Aus Gründen der Klarheit,
Um die Zeitzonenfunktion zu verwenden, verwenden Sie jetzt moment.tz ("date_string / moment ()", "time_zone") ( weitere Informationen finden Sie unter https://momentjs.com/timezone/ ). Diese Funktion gibt ein Momentobjekt mit einer bestimmten Zeitzone zurück. Aus Gründen der Klarheit,
Wenn Sie nun versuchen, newYork (das Moment-Objekt) mit dem toDate () von Moment (ISO 8601-Formatkonvertierung) zu konvertieren, erhalten Sie die Zeit von Greenwich, UK. Weitere Informationen finden Sie in diesem Artikel https://www.nhc.noaa.gov/aboututc.shtml über UTC. Wenn Sie jedoch nur Ihre Ortszeit in diesem Format (New Yorker Zeit, gemäß diesem Beispiel) möchten , fügen Sie einfach die Methode .utc (true) mit dem Argument true zu Ihrem Momentobjekt hinzu . Aus Gründen der Klarheit,
Kurz gesagt, moment.tz berücksichtigt die von Ihnen angegebene Zeitzone und vergleicht Ihre Ortszeit mit der Zeit in Greenwich, um ein Ergebnis zu erhalten. Ich hoffe das war nützlich.
quelle
moment hat die js lib ab 06/2018 aktualisiert.
Wenn Sie die Freiheit haben, Angular5 + zu verwenden, verwenden Sie dort besser die datePipe-Funktion als die Zeitzonenfunktion hier. Ich muss moment.js verwenden, da mein Projekt nur auf Angular2 beschränkt ist.
quelle
versuchen (ohne
format
Schritt)Code-Snippet anzeigen
quelle
new Date(moment())
ist äquivalent zunew Date()
. Die Zeitzone ist nur für d eingestellt .