2015-12-15 47 views
3

我在javascript中使用矩和時間時區,而這部分是我見過的最不直觀的API之一。用我創建的時區偏移量初始化一個矩塊

我預計:

moment("2015-12-14T04:00:00Z").utcOffset() 

將是一個純函數,返回偏移列入說法,這是0.但是,相反它含蓄地將其轉換爲我的本地時區偏移量(PST),所以這返回-480爲什麼?我問了剛剛創建的對象的偏移量,而不是我目前所處的偏移量。這就好像我寫了一個調用User.find(123).name()的api而不是用戶名稱的api 123.

反正,我可以做

moment("2015-12-14T04:00:00Z").tz("utc").utcOffset() 

但我的時間字符串是動態的,所以我不知道的時區。

我怎麼能得到我期望的行爲,在我傳入的字符串中包含的時區偏移量中的js矩?

回答

9

使用parseZone保持偏移,因爲它是在過去。

moment.parseZone("2015-12-14T04:00:00Z") 

至於「爲什麼?」你的問題的一部分:

  • moment(...)是本地模式。模糊輸入(無偏移)被假定爲本地時間。明確的輸入(帶偏移量)是調整爲到當地時間。
  • moment.utc(...)是utc模式。模糊輸入被認爲是UTC。明確的輸入是調整爲到UTC。
  • moment.parseZone()保持傳入的輸入區域。如果輸入不明確,則與本地模式相同。
  • moment.tz(...)使用時區時區插件可以解析特定時區的輸入。

請記住,時刻必須與各種各樣的投入作鬥爭。

另外請記住,時區和時區偏移是兩個不同的事情。 -08:00的偏移量並不一定意味着您在美國太平洋時區。

+1

是的,這可能是我沒有考慮過的東西或歷史包袱什麼的。將基本形式moment()作爲本地模式看起來像是一個奇怪的選擇,對於默認行爲,parseZone()行爲似乎更自然。感謝您的解釋 – danny

+2

僅供參考,這個話題實際上是我第一次涉及到moment.js。請參閱[#611](https://github.com/moment/moment/issues/611)和[#887](https://github.com/moment/moment/issues/887)瞭解歷史記錄。 –