使用Moment猜测返回时区名称()

时间:2017-10-07 14:41:43

标签: javascript timezone momentjs

我想使用Moment's guess() function返回时区大陆(或国家/地区)和城市,例如:

moment.tz.guess(); // America/Chicago

但上述情况并不奏效。返回值为CET,这是其他内容。它是中欧时代的缩写,即没有大陆国家,没有城市。

如何使用guess()功能返回欧洲/斯德哥尔摩'美国/芝加哥'等?

4 个答案:

答案 0 :(得分:3)

当主机环境(浏览器等)实现ECMA-402的API但在结果中返回错误类型的时区时,会发生这种情况。如果你在Moment中看到这个,你可能也会在没有Moment的情况下得到这个结果:

Intl.DateTimeFormat().resolvedOptions().timeZone

目前,Moment假设如果此API存在,则它提供有效的IANA时区标识符或返回undefined。但是,某些环境会像您指出的那样返回CET之类的内容。

忽略不良结果已在moment/moment-timezone#423中记录为功能请求。在这种特殊情况下,环境是Android设备上较旧的Chrome浏览器。

答案 1 :(得分:0)

根据momentjs库文档,您可以这样做:

moment.tz([2012, 0], 'America/New_York').zoneAbbr(); // would return "EST"

这是参考: https://momentjs.com/timezone/docs/#/using-timezones/formatting/

答案 2 :(得分:0)

我知道我对此很迟,但是我正在寻找相同问题的答案。对于寻找相同答案的其他人,使用以下方法应该有效:

moment.tz.guess()

作为参考,我同时使用moment-with-locales.jsmoment-timezone-with-data.js,仅使用简单的moment.tz.guess()就会为我返回完整的时区名称,即:America/DenverAmerica/New_York

答案 3 :(得分:0)

尝试使用moment.format('Z'),您将获得-05:00之类的东西。然后根据预定义的映射将其映射到CET或您正在使用的任何内容。