Intl.supportedValuesOf('timezone') 不提供最新的时区信息

Intl.supportedValuesOf('timezone') doesn't provide the latest timezone information

提问人:muki 提问时间:10/2/2023 最后编辑:Bergimuki 更新时间:10/6/2023 访问量:89

问:

我想获取最新的时区列表。我正在使用 ,这是输出,例如:Intl.supportedValuesOf('timeZone')

  • “亚洲/西贡”
  • “太平洋/波纳佩”

上述城市已被弃用。例如,当我研究时区时,我发现它已被重命名为 ,并且不再作为有效时区存在。'Asia/Saigon''Asia/Ho_Chi_Minh''Pacific/Ponape'

我很好奇为什么不提供最新的时区信息。Intl.supportedValuesOf('timeZone')

是否有其他方法可以获取最新的时区列表?谢谢。

javascript datetime timezone ecmascript-intl

评论

2赞 Bergi 10/2/2023
为什么?要么是因为您的浏览器尚未更新,要么是因为它们仍然支持旧时区名称,以免破坏内容。不,没有其他内置方法。如果您关心对有效时区名称列表进行版本控制,最好自行维护。
0赞 RobG 10/2/2023
IANA 时区和代表位置的维护者是 IANA,详情请见此处。如果您想要最新的列表,请从此处下载。

答:

1赞 Matt Johnson-Pint 10/6/2023 #1

我相信这是一个已知的错误。一些问题的链接:这里、这里这里可能是其他人。

原因是该列表来自 ICU 函数调用,该调用仅返回“规范”区域(根据 ICU/CLDR,而不是 IANA),不包括别名,也排除了系统 () 区域。Etc/*

换句话说,这是 V8 和其他 JS 引擎中的实现错误,而不是 JavaScript 本身的错误。

评论

1赞 Matt Johnson-Pint 10/6/2023
关于为什么 IANA 和 CLDR 在规范化方面存在差异的更多信息,这是我关于该主题的其他答案之一的一部分:stackoverflow.com/a/45868768/634824
0赞 Bergi 10/6/2023
您链接的所有错误报告都不是关于排除已弃用的时区值的。如果有的话,它们是关于包含更多价值观的。
1赞 Bergi 10/6/2023
这个问题可能是相关的,但它说“如果 Intl.supportedValuesOf('timeZone') 输出所有有效值,甚至是来自系统的值,那就太好了。这不是 SO 问题的 OP 要问的:他们希望从输出中删除已弃用的时区,所以恰恰相反。
2赞 Matt Johnson-Pint 10/6/2023
看起来正在努力解决这些规范化差异。希望这也能解决这个问题。请参阅 github.com/tc39/ecma402/issues/806github.com/unicode-org/cldr/pull/3105unicode-org.atlassian.net/browse/CLDR-14453
1赞 Bergi 10/6/2023
是的,我认为 github.com/tc39/ecma402/issues/806 完全适用于 OP 问题!