Moment.js切换时差12小时及以上时区时日期异常问题
Moment.js跨±12时区日期跳变问题解决方法
问题根源
你遇到的日期跳变完全是API调用错误导致的:
moment()不带参数会创建当前系统时间的Moment实例,和你之前定义的a对象无关联utc()方法仅支持传入布尔值切换UTC模式,不支持传入其他Moment对象作为参数,你写的moment().utc(a)本质是拿当前系统时间转UTC,根本没有用到你存储的2021-10-20的日期值,才会出现日期跳变的情况。
正确解决代码
如果要把已有的带时区的Moment对象转成UTC格式,直接调用对象自带的utc()方法即可,不受系统时区影响:
// 原有初始化逻辑不变 var a = moment.utc('20-Oct-2021').tz('Asia/Kolkata'); // 转UTC格式化的正确写法 var utcResult = a.utc().format();
上述代码无论系统时区切换为Pacific/Auckland还是其他任意时区,输出永远为2021-10-19T18:30:00Z,不会出现日期跳变问题。
额外注意事项
- 持久化存储日期时建议统一存储UTC时间戳或者带
Z后缀的UTC标准字符串,不要存储带本地时区偏移的日期串,避免后续转换出错 - Moment.js已正式停止维护,新项目推荐使用Day.js、Luxon等同功能替代库,API兼容性高且体积更小、维护更及时
内容的提问来源于stack exchange,提问作者Prabhakaran
相关产品推荐
相关产品推荐

