我正在使用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。 –