回答

8

技術上,更正確的咒語是:

Intl.DateTimeFormat().resolvedOptions().timeZone 

不幸的是,並非所有的實現目前支持Intl API的時區功能。因此,雖然這將在Chrome中返回有效的IANA時區,但它在FireFox和其他幾個瀏覽器中還不會這樣做。

kangax Intl compatibility table將此功能顯示爲標記爲resolvedOptions().timeZone defaults to the host environmentDateTimeFormat對象下的子項目。

請參見下面的Firefox瀏覽器項目:

  • Bug 1158733 - 從Javascript國際化API
  • Bug 895737檢測系統時區 - DateTimeFormat不跟蹤當前時區
  • Bug 837961 - 添加IANA時區支持國際化名稱API

與此同時,有兩種可行的替代方案s:

請注意,在嘗試其他猜測算法之前,它們都將在內部嘗試使用Intl API(如果它可用並且正常運行)。

另請注意,最佳做法是永不依賴時區檢測/猜測,而是用它從時區選取器控件中選擇合理的默認值。總是給用戶一些選擇他們想要的時區的方法。這一點非常重要,因爲他們目前的計算機時區可能會或可能不是他們想要在您的應用程序中使用的時區。例如,基於網絡的日曆軟件(例如Google日曆或Outlook.com)通常允許用戶在其用戶配置文件中設置時區。

+0

當我嘗試使用Firefox時,它不顯示IANA代碼,而是「Etc/+ 9GMT」。是否有可能獲得IANA? –

+0

你確定這正是返回的?如果您在沒有DST的UTC-9時區,則「Etc/GMT + 9」響應將成爲有效的IANA時區。但是你寫的字符沒有順序。 –

+0

對不起,我的錯。它總是返回'Etc/GMT-9',而不是IANA代碼'亞洲/首爾',如預期的那樣。在Chrome 64位的Mac 61.0.3163.100和Safari中完美工作。只有Firefox它像這樣返回。 (使用moment.tz.guess()或jstz.determine()..都返回那樣) –

相關問題