我正在使用Intl API。在 Chrome 中:
Intl.DateTimeFormat().resolved.timeZone
返回“欧洲/伦敦”
在 Firefox 中,此返回
undefined
,即使 Firefox 支持 Intl。
如何使用 Firefox 获取时区?
从技术上来说,更正确的咒语是:
Intl.DateTimeFormat().resolvedOptions().timeZone
不幸的是,目前并非所有实现都支持
Intl
API 的时区功能。因此,虽然这将在 Chrome 中返回有效的 IANA 时区,但在 FireFox 和其他几个浏览器中还无法执行此操作。
kangax Intl 兼容性表将此功能显示为标记为
DateTimeFormat
的 resolvedOptions().timeZone defaults to the host environment
对象下的子项。
请参阅以下 FireFox 工作项:
与此同时,有两种可行的替代方案:
moment.tz.guess()
来尝试猜测用户的时区。请注意,在尝试其他猜测算法之前,这两个方法都会在内部尝试使用
Intl
API(如果可用且正常运行)。
另请注意,最佳实践是永远不要仅仅依赖时区检测/猜测,而是使用它从时区选择器控件中选择合理的默认值。始终为用户提供某种方式来选择他们想要的时区。这很重要,因为他们当前将计算机设置的时区可能是也可能不是他们希望在您的应用程序中使用的时区。例如,基于网络的日历软件(例如 Google 日历或 Outlook.com)通常允许用户在其用户个人资料中设置时区。