我正在使用Intl API。在Chrome中:使用Intl API獲取時區在Firefox中不起作用:
Intl.DateTimeFormat().resolved.timeZone
返回 「歐洲/倫敦」
在Firefox這個回報undefined
,即使Firefox supports Intl。
我該如何獲得Firefox的時區?
我正在使用Intl API。在Chrome中:使用Intl API獲取時區在Firefox中不起作用:
Intl.DateTimeFormat().resolved.timeZone
返回 「歐洲/倫敦」
在Firefox這個回報undefined
,即使Firefox supports Intl。
我該如何獲得Firefox的時區?
技術上,更正確的咒語是:
Intl.DateTimeFormat().resolvedOptions().timeZone
不幸的是,並非所有的實現目前支持Intl
API的時區功能。因此,雖然這將在Chrome中返回有效的IANA時區,但它在FireFox和其他幾個瀏覽器中還不會這樣做。
kangax Intl compatibility table將此功能顯示爲標記爲resolvedOptions().timeZone defaults to the host environment
的DateTimeFormat
對象下的子項目。
請參見下面的Firefox瀏覽器項目:
與此同時,有兩種可行的替代方案s:
moment.tz.guess()
。請注意,在嘗試其他猜測算法之前,它們都將在內部嘗試使用Intl
API(如果它可用並且正常運行)。
另請注意,最佳做法是永不依賴時區檢測/猜測,而是用它從時區選取器控件中選擇合理的默認值。總是給用戶一些選擇他們想要的時區的方法。這一點非常重要,因爲他們目前的計算機時區可能會或可能不是他們想要在您的應用程序中使用的時區。例如,基於網絡的日曆軟件(例如Google日曆或Outlook.com)通常允許用戶在其用戶配置文件中設置時區。
當我嘗試使用Firefox時,它不顯示IANA代碼,而是「Etc/+ 9GMT」。是否有可能獲得IANA? –
你確定這正是返回的?如果您在沒有DST的UTC-9時區,則「Etc/GMT + 9」響應將成爲有效的IANA時區。但是你寫的字符沒有順序。 –
對不起,我的錯。它總是返回'Etc/GMT-9',而不是IANA代碼'亞洲/首爾',如預期的那樣。在Chrome 64位的Mac 61.0.3163.100和Safari中完美工作。只有Firefox它像這樣返回。 (使用moment.tz.guess()或jstz.determine()..都返回那樣) –
現在在Ubuntu機器上的53.0.3(64位)上支持FF。 –