我正在使用Intl API。在Chrome中:
Intl.DateTimeFormat().resolved.timeZone
返回"欧洲/伦敦">
在Firefox中,此返回undefined
,即使Firefox支持Intl.
如何使用Firefox获取时区
从技术上讲,更正确的咒语是:
Intl.DateTimeFormat().resolvedOptions().timeZone
遗憾的是,目前并非所有实现都支持Intl
API的时区功能。因此,虽然这将在Chrome中返回有效的IANA时区,但在FireFox和其他几种浏览器中还不会这样做。
kangax-Intl兼容性表将此功能显示为标记为resolvedOptions().timeZone defaults to the host environment
的DateTimeFormat
对象下的子项。
请参阅以下FireFox工作项:
- Bug 1158733-从Javascript国际化API检测系统时区
- Bug 895737-DateTimeFormat无法跟踪当前时区
- Bug 837961-为国际化API添加对IANA时区名称的支持
与此同时,有两种可行的替代方案:
- jsTimeZoneDetect-它只专注于时区猜测任务
- moment_timezone——它是流行的moment.js库的一个附加组件,包含一个API
moment.tz.guess()
,用于猜测用户的时区
请注意,在尝试其他猜测算法之前,如果Intl
API可用且正在运行,则这两种方法都会在内部尝试使用它。
还要注意,最佳实践是永远不要只依赖时区检测/猜测,而是使用它从时区选择器控件中选择一个合理的默认值。始终为用户提供一些选择所需时区的方法。这一点很重要,因为他们目前将计算机设置为的时区可能是他们希望在您的应用程序中使用的时区,也可能不是。例如,基于web的日历软件(如Google Calendar或Outlook.com)通常允许用户在其用户配置文件中设置时区。