【问题标题】:Return timezone name with Moment's guess()使用 Moment's guess() 返回时区名称
【发布时间】:2018-03-19 04:28:06
【问题描述】:

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

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

但以上不起作用。返回值是CET,这是别的东西。它是中欧时间的缩写,即没有大陆国家,没有城市。

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

【问题讨论】:

    标签: javascript timezone momentjs


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果我想要缩写,那就太好了,但我想要'America/New_York'。知道如何返回名称而不是缩写吗?
    • 你是对的,我误解了你的问题,对不起。你试过npmjs.com/package/jstimezonedetect吗?
    【解决方案2】:

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

    Intl.DateTimeFormat().resolvedOptions().timeZone
    

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

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

    【讨论】:

    • Intl 来自哪里?
    • @Pipo - 它内置于现代浏览器中。
    【解决方案3】:

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

    moment.tz.guess()
    

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2012-06-02
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 2018-04-23
        相关资源
        最近更新 更多