【问题标题】:Add new timezone to moment.js timezone将新时区添加到 moment.js 时区
【发布时间】:2015-03-13 10:23:51
【问题描述】:

我必须在 moment.js 中添加“Asia/Bangkok”(ICT),因为它似乎默认不支持它。

加载 moment.js 和 moment-timezone.js 后,我尝试在 this example 之后定义这个特定时区:

moment.tz.add({
    "zones": {
        "Asia/Bangkok": [
            "6:42:4 - LMT 1880 6:42:4",
            "6:42:4 - BMT 1920_3 6:42:4",
            "7 - ICT"
        ],
    }
});

var currentTimeString = moment().tz('Asia/Bangkok').format('DD MMM YYYY, HH:mm:ss');

但是,我不断收到错误消息:

“Moment Timezone 没有亚洲/曼谷的数据。请参阅 http://momentjs.com/timezone/docs/#/data-loading/。”

有什么想法吗?

【问题讨论】:

  • 也许文档更好:Adding a Zone.
  • 是的,这就是我开始的地方,但是配置格式没有很好地解释,我没有找到一个易于理解的示例如何为自定义时区构建区域数据'America/Los_Angeles|PST PDT|80 70|01010101010|1Lzm0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0'信息通信技术
  • 您可以使用pack 方法。我认为你的 OP 中的数据格式有误,解压后的格式在这里解释:http://momentjs.com/timezone/docs/#/data-formats/unpacked-format/.

标签: javascript datetime timezone momentjs


【解决方案1】:

我想发布我的解决方案,以供其他人在苦苦挣扎的 moment.js API 中苦苦挣扎...

要创建时区,您必须创建一个解压缩的时区对象:

var unpacked = {
    name    : 'Asia/Bangkok',
    abbrs   : ['ICT'],
    untils  : [null],
    offsets : [-420]
};

*请注意,虽然 ITC 是 UTC+7,但由于某种原因,数组中的 UTC 偏移量必须是 7*60 = 420 的加法逆(负)。*

在你可以使用它之前,你还必须打包这个对象,为此你需要包含 moment-timezone-utils.js

var packed = moment.tz.pack(unpacked);

它将输出部分以 Base 60 编码的打包时区格式: Asia/Bangkok|ICT|-70|0|

现在可以添加了: moment.tz.add('Asia/Bangkok|ICT|-70|0|');

如果您不想经历所有这些麻烦,还有一个pre-packed file on GitHub,您可以在其中选择所需的时区。

【讨论】:

  • 你如何使用那个预打包的文件?
  • 我得到moment.tz.pack is not a function。你用的是哪个版本?我的是moment-timezone: ^0.5.28
猜你喜欢
  • 2015-11-28
  • 2015-03-21
  • 1970-01-01
  • 2023-03-08
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
相关资源
最近更新 更多