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

时间:2015-01-15 03:38:36

标签: javascript datetime timezone momentjs

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

加载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/“。

任何想法为什么?

1 个答案:

答案 0 :(得分:12)

我想发布我的解决方案,因为其他人正在努力解决那些记录严重的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,您可以在其中选择所需的时区。