【问题标题】:Invalid time zone specified: US/Alaska, US/Arizona, US/Mountain, US/Central etc error in Chrome but working in Mozilla指定的时区无效:Chrome 中的 US/Alaska、US/Arizona、US/Mountain、US/Central 等错误但在 Mozilla 中工作
【发布时间】:2020-01-02 18:29:59
【问题描述】:

我正在尝试将时间戳转换为不同时区的本地时间,发现某些 TimeZone 在 Chrome (v76.0.38) 中不支持,但在 Mozilla (v68.0.2) 中工作正常。

  let d = new Date(1567083463);
  let n = d.toLocaleString('en-GB', { timeZone: "US/Arizona" });
  

未捕获的 RangeError:指定的时区无效:美国/亚利桑那州

在 Date.toLocaleString ()

其他几个时区也抛出相同的错误

US/Alaska US/Mountain US/Central US/East-Indiana

官方支持这些时区,如其网站所述 Chrome Supported Time Zone Values

【问题讨论】:

  • 那个网站不是Chrome支持的时区列表……!

标签: javascript google-chrome timezone ecmascript-intl


【解决方案1】:

该页面描述了另一个谷歌产品支持的时区,不是 Chrome

参考MDN's documentation on toLocaleString

时区
要使用的时区。实现必须识别的唯一值是“UTC”;默认值是运行时的默认时区。实现还可以识别IANA time zone database 的时区名称,例如“Asia/Shanghai”、“Asia/Kolkata”、“America/New_York”。

可以在该 IANA 链接上找到有效时区,或者您可以使用 Wikipedia: List of tz database time zones。您会注意到所有“US/*”时区都已弃用。仅使用 Wikipedia 页面中的 Canonical 条目,例如:

  • 美国/纽约
  • 美国/丹佛
  • 美国/芝加哥

等等

【讨论】:

  • 从存在首选更新形式的角度来看,它们已被弃用。但即使这样也是固执己见的(实际上是我将该专栏添加到维基百科页面的人)。他们都应该仍然工作。这里还有其他事情发生,因为 一些 旧的“已弃用”样式仍然可以在 Chrome 中使用,而其他的则不行。一些示例,"Canada/Pacific""Australia/Queensland""Mexico/General""Iran" 在 Chrome 中工作,但 "Australia/ACT""Mexico/BajaNorte""GB-Eire" 不能。
  • @MattJohnson-Pint 因为"Mexico/BajaNorte" 和其他名称是地区的 名称,它们已被 IANA 弃用。 ftp.iana.org/tz/tzdb-2016g/backward 。不应将 Wikipedia 视为规范来源,而应将其视为方便的查找。最终应查阅 IANA 数据。
  • @MattJohnson-Pint 同样,规范只说必须支持 UTC;它没有提及支持的任何其他时区或其列表。最终取决于个人的实施。不过,我不希望 IANA 已弃用的 TZ 能够正常工作。
  • 谢谢,我已经更改了名称,但看到它在 Mozilla 而不是在 chrome 中正常工作令人困惑
  • 规范没有指定应该支持哪些时区。它留给个人实现。
猜你喜欢
  • 1970-01-01
  • 2016-07-02
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多