使用 Intl API 获取时区在 Firefox 中不起作用:

Getting Timezone using Intl API doesn't work in Firefox:

我正在使用Intl API。在 Chrome:

 Intl.DateTimeFormat().resolved.timeZone

Returns "Europe/London"

在 Firefox 中这个 return undefined,即使 Firefox supports Intl.

如何使用 Firefox 获取时区?

从技术上讲,更正确的咒语是:

Intl.DateTimeFormat().resolvedOptions().timeZone

遗憾的是,目前并非所有实现都支持 Intl API 的时区功能。因此,虽然这将 return 在 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

同时,有两个可行的选择:

请注意,在尝试其他猜测算法之前,如果 Intl API 可用且正常运行,这两者都会在内部尝试使用它。

另请注意,最佳做法是永远不要仅仅依赖时区检测/猜测,而是将其用于 select 来自时区选择器控件的合理默认值。总是给用户一些方式来选择他们想要的时区。这一点很重要,因为他们目前在计算机上设置的时区可能是也可能不是他们希望在您的应用程序中使用的时区。例如,基于 Web 的日历软件(例如 Google 日历或 Outlook.com)通常允许用户在其用户配置文件中设置时区。