2016-08-05 21 views
1

我想一個本地日期對象轉換爲日期對象在另一個時區,這是我所:如何將moment.js時區與toDate組合以構建新的日期對象?

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

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

,但如果我這樣做

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

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

正如你所看到的,我可以格式化但是我喜歡這個時刻的對象,但是如何將它返回給日期對象呢?

+1

* TODATE *返回Date對象相同的內部時間戳。你所看到的是該日期的實現依賴[* toString *方法](http://ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring)的結果。請注意,Date對象本身沒有時區,該信息來自主機系統。日期的內部時間值是UTC。 – RobG

+1

我投票結束這個問題作爲題外話,因爲沒有答案。 OP *是*創建一個Date對象。 – RobG

回答

0

...到另一個時區

中的JavaScript對象Date不能代表另一個時區的日期對象。它只是一個時間戳,以毫秒爲單位,自1970-01-01午夜UTC開始測量,您可以通過.valueOf().getTime()查看。

當您在Date對象上調用.toString()或以其他方式將其強制爲字符串時(例如在調試控制檯中顯示時),它會將時間戳轉換爲環境運行的本地時區。

因此,儘管您使用moment-timezone做了任何轉換,您仍然在討論相同的時刻,因此在結果Date對象中將具有相同的時間戳。

換句話說,這些都是等價的:

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

...因爲它們都具有的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 
相關問題