如何将moment.Moment对象转换为UTC时区且保留原有日期时间数值?
Moment.js 时区转换方案
核心实现
要实现切换时区为UTC时不自动换算时间数值,仅修改时区标识,Moment.js 提供了原生支持,实现非常简单:
只需要在调用utc()方法时传入true参数即可,示例代码如下:
// 示例原对象(GMT+2时区) const original = moment('Tue Sep 14 2021 00:00:00 GMT+0200'); // 转换为UTC时区,保留原日期时间数值 const utcMoment = original.clone().utc(true);
效果验证
// 输出结果末尾带Z标识UTC时区,时间数值完全不变 console.log(utcMoment.format()); // 2021-09-14T00:00:00Z
备选方案
如果需要更灵活的自定义格式匹配,也可以先提取原对象的无时区时间字符串,再用UTC模式解析:
const timeStr = original.format('YYYY-MM-DD HH:mm:ss'); const utcMoment = moment.utc(timeStr);
注意事项
- 操作前调用
clone()是为了避免修改原moment对象:moment对象本身是可变的,直接对原对象调用utc()会修改原对象本身的时区信息。 - 如果你使用的是
moment-timezone扩展库,切换其他时区要保留时间数值的话,同样可以在tz()方法的第二个参数传入true,示例:original.clone().tz('Asia/Shanghai', true)
内容的提问来源于stack exchange,提问作者iloveseven
相关产品推荐
相关产品推荐

