我想使用 Moment 的 guess() 函数返回时区大陆(或国家)和城市,如他们的例子所示:
moment.tz.guess(); // America/Chicago
但上述方法不起作用。返回值是 CET
,这是另一回事。它是中欧时间的缩写,即没有大陆国家,没有城市。
如何使用guess()
函数返回"欧洲/斯德哥尔摩"、"美国/芝加哥"等?
当主机环境(浏览器等)实现 ECMA-402 的 API 但在结果中返回错误的时区类型时,会发生这种情况。 如果您在 Moment 中看到了这一点,您可能也可以在没有 Moment 的情况下获得以下结果:
Intl.DateTimeFormat().resolvedOptions().timeZone
目前,Moment假设如果此API存在,则它要么提供有效的IANA时区标识符,要么返回undefined
。 但是,如您所指出的,某些环境会返回类似CET
的内容。
忽略错误结果已记录为时刻/时刻时区#423 中的功能请求。 在这种特殊情况下,环境是Android设备上较旧的Chrome浏览器。
我已经很晚了,但我正在寻找同一问题的答案。对于其他寻找相同答案的人,使用以下方法应该有效:
moment.tz.guess()
作为参考,我同时使用带有语言环境的时刻.js和带有数据的时刻时区.js,并且仅使用简单的moment.tz.guess()
将为我返回完整的时区名称,即:America/Denver
或 America/New_York
等。
根据 momentjs 库文档,你可以这样做:
moment.tz([2012, 0], 'America/New_York').zoneAbbr(); // would return "EST"
以下是参考:https://momentjs.com/timezone/docs/#/using-timezones/formatting/
尝试使用moment.format('Z')
,你会得到-05:00
什么的。然后根据预定义的映射将其映射到CET或您正在使用的任何内容。