将新时区添加到时刻.js时区

Add new timezone to moment.js timezone

本文关键字:js 时区 时刻 新时区 添加      更新时间:2023-09-26

我必须在moment.js中添加"亚洲/曼谷"(ICT),因为它似乎默认不支持它。

加载时刻.js和时刻时区后.js我尝试按照以下示例定义此特定时区:

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');

但是,我不断收到错误:

"时刻时区没有亚洲/曼谷的数据。看 http://momentjs.com/timezone/docs/#/data-loading/。"

知道为什么吗?

我想

发布我的解决方案,供其他人在 moment.js 的糟糕记录的 API 中苦苦挣扎......

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

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

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

在使用它之前,您还必须打包此对象,为此您需要包含时刻时区实用程序.js

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

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

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

如果您不想经历所有这些麻烦,GitHub上还有一个预打包的文件,您可以在其中选择所需的时区。