用Moment的guess()返回时区名称

问题描述 投票:0回答:5

我想使用Moment的guess()函数返回时区大陆(或国家)和城市,如他们的示例所示:

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

但是上面的方法不起作用。返回值是

CET
,这是别的东西。它是中欧时间的缩写,即没有大陆国家,没有城市。

如何使用

guess()
函数返回“欧洲/斯德哥尔摩”、“美国/芝加哥”等?

javascript timezone momentjs
5个回答
12
投票

当主机环境(浏览器等)实现 ECMA-402 的 API 但在结果中返回错误类型的时区时,就会发生这种情况。如果您在使用 Moment 时看到了这一点,那么在不使用 Moment 的情况下您也可以通过以下方式获得此结果:

Intl.DateTimeFormat().resolvedOptions().timeZone

目前,Moment 假设如果此 API 存在,则它要么提供有效的 IANA 时区标识符,要么返回

undefined
。然而,正如您所指出的,某些环境会返回类似
CET
的内容。

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


1
投票

我知道我已经很晚了,但我一直在寻找同一问题的答案。对于寻找相同答案的其他人,使用以下内容应该可行:

moment.tz.guess()

作为参考,我同时使用 moment-with-locales.jsmoment-timezone-with-data.js,仅使用简单的

moment.tz.guess()
将为我返回完整的时区名称,即:
America/Denver
America/New_York


0
投票

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

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

参考资料如下: https://momentjs.com/timezone/docs/#/using-timezones/formatting/


0
投票

就我而言,我的代码中有这样的导入

import moment from "moment";

我在使用时遇到了这个问题

property 'tz' does not exist on type 'typeof moment'.

moment.tz.guess();

我刚刚替换了导入来使用它

import momentTZ from "moment-timezone";

momentTZ.tz.guess();

完成了!

现在一切正常。


-1
投票

尝试使用

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

© www.soinside.com 2019 - 2024. All rights reserved.