我想使用Moment的guess()函数返回时区大陆(或国家)和城市,如他们的示例所示:
moment.tz.guess(); // America/Chicago
但是上面的方法不起作用。返回值是
CET
,这是别的东西。它是中欧时间的缩写,即没有大陆国家,没有城市。
如何使用
guess()
函数返回“欧洲/斯德哥尔摩”、“美国/芝加哥”等?
当主机环境(浏览器等)实现 ECMA-402 的 API 但在结果中返回错误类型的时区时,就会发生这种情况。如果您在使用 Moment 时看到了这一点,那么在不使用 Moment 的情况下您也可以通过以下方式获得此结果:
Intl.DateTimeFormat().resolvedOptions().timeZone
目前,Moment 假设如果此 API 存在,则它要么提供有效的 IANA 时区标识符,要么返回
undefined
。然而,正如您所指出的,某些环境会返回类似 CET
的内容。
忽略不良结果已在 moment/moment-timezone#423 中记录为功能请求。在这种特殊情况下,环境是 Android 设备上较旧的 Chrome 浏览器。
我知道我已经很晚了,但我一直在寻找同一问题的答案。对于寻找相同答案的其他人,使用以下内容应该可行:
moment.tz.guess()
作为参考,我同时使用 moment-with-locales.js 和 moment-timezone-with-data.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/
就我而言,我的代码中有这样的导入
import moment from "moment";
我在使用时遇到了这个问题
property 'tz' does not exist on type 'typeof moment'.
moment.tz.guess();
我刚刚替换了导入来使用它
import momentTZ from "moment-timezone";
momentTZ.tz.guess();
完成了!
现在一切正常。
尝试使用
moment.format('Z')
,你会得到-05:00
之类的东西。然后根据预定义的地图将其映射到 CET 或您正在使用的任何内容。