2016-08-05 3 views
1

Ich mag ein lokales Datum Objekt zu einem Date-Objekt in einer anderen Zeitzone konvertieren und das ist, was ich habe:Wie kombiniere ich moment.js timezone mit toDate, um ein neues Datumsobjekt zu erstellen?

moment("2016-08-04T23:30:37Z").tz("Asia/Hong_Kong").format("M/DD/YYYY h:mm a") 

>>"8/05/2016 7:30 am" 

aber wenn ich

moment("2016-08-04T23:30:37Z").tz("Asia/Hong_Kong").toDate() 

>>Thu Aug 04 2016 16:30:37 GMT-0700 (PDT) 

tun Wie Sie sehen können, kann ich formatieren das moment objekt aber mag ich gerne, aber wie gebe ich es wieder an ein datumsobjekt zurück?

+1

* toDate haben * ein Date-Objekt zurückgibt. Was Sie sehen, ist das Ergebnis der implementierungsabhängigen [* toString * -Methode] (http://ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring) dieses Datums. Beachten Sie, dass Datumsobjekte selbst keine Zeitzone haben. Diese Informationen stammen vom Host-System. Der interne Zeitwert des Datums ist UTC. – RobG

+1

Ich stimme ab, diese Frage als Off-Topic zu schließen, weil es keine Antwort gibt. Das OP * erstellt * ein Date-Objekt. – RobG

Antwort

0

... zu einem Date-Objekt in einer anderen Zeitzone

Das Objekt JavaScript Date eine andere Zeitzone nicht darstellen kann. Es ist einfach ein Zeitstempel, gemessen in Millisekunden seit 1970-01-01 Mitternacht UTC, den Sie mit .valueOf() oder .getTime() sehen können.

Wenn Sie .toString() auf einem Date Objekt aufrufen oder auf andere Weise zwingen sie in einen String (wie wenn es in der Debug-Konsole angezeigt wird), wandelt es den Zeitstempel auf die lokale Zeitzone, in der Umgebung ausgeführt wird.

Daher, trotz aller Konvertierungen, die Sie mit Moment-Zeitzone tun, sprechen Sie immer noch über den gleichen Zeitpunkt, und wird daher den gleichen Zeitstempel in dem resultierenden Date Objekt haben.

Mit anderen Worten, dies sind alle gleichwertig:

moment("2016-08-04T23:30:37Z").toDate() 
moment.utc("2016-08-04T23:30:37Z").toDate() 
moment("2016-08-04T23:30:37Z").tz("Asia/Hong_Kong").toDate() 
new Date("2016-08-04T23:30:37Z") 

... weil sie alle die gleiche interne Zeitstempel 1470353437000

moment("2016-08-04T23:30:37Z").valueOf()      // 1470353437000 
moment.utc("2016-08-04T23:30:37Z").valueOf()     // 1470353437000 
moment("2016-08-04T23:30:37Z").tz("Asia/Hong_Kong").valueOf() // 1470353437000 
new Date("2016-08-04T23:30:37Z").valueOf()      // 1470353437000 
Verwandte Themen