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

标签 javascript datetime timezone momentjs

我必须将“Asia/Bangkok”(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 has no data for Asia/Bangkok. See 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 的加法逆(负)。*

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

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

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

现在可以添加了: moment.tz.add('亚洲/曼谷|ICT|-70|0|');

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

关于javascript - 将新时区添加到 moment.js 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27956436/

相关文章:

javascript - onclick 不适用于输入类型=按钮

javascript - 动态创建一个 iframe 并将 onload 事件附加到它

powershell - 在日志文件中查找大于定义时间的条目

perl - 你如何在 Perl 中读取系统时间和日期?

java - 在 Java 8 中使用 TemporalAmount 或 TemporalUnit 有什么区别?

php - php 修改默认时区的方法

WebStorm 中的 JavaScript 代码样式显示未终止语句警告

javascript - 带有 Sweet Alert 的 Laravel 删除功能

php - 将日期从数据库转换为不同的时区

ios - 如何通过经度和纬度获取时区