You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moment.js无法将UTC日期正确转换为本地时间问题求助

问题原因

问题核心是Moment.js对ASP.NET风格序列化日期格式的解析逻辑和调用方法的逻辑冲突:

  • /Date(1622491200000)/是微软系后端常用的序列化日期格式,其中的数字部分1622491200000是UTC标准的1970纪元毫秒数,原生Moment.js可以自动识别该格式,直接解析为正确的UTC时间对象。
  • 额外调用的moment.utc()方法作用是将输入的时间视为本地时间,再转换为UTC时间,相当于给正确的UTC时间额外叠加了一次负的时区偏移,最终转本地时间时就出现了偏差,和预期结果不符。
  • 1622491200000对应的UTC时间为2021-06-01 00:00:00,按照预期输出2021-06-01 06:00:00判断本地时区为UTC+6,错误逻辑叠加偏移后就得到了2021-06-01 01:00:00的错误结果。
解决方案

方案1:移除多余的utc()调用

Moment原生支持该日期格式的解析,不需要额外加utc()方法,直接调用后转本地时间即可得到正确结果:

var date = moment('/Date(1622491200000)/').local().format('YYYY-MM-DD HH:mm:ss')
console.log('date', date); // 输出 2021-06-01 06:00:00

方案2:先提取纯时间戳再解析(兼容低版本Moment)

如果使用的Moment版本较低,无法自动识别该格式,可以先提取字符串中的纯数字时间戳再进行解析,避免格式识别错误:

const dateStr = '/Date(1622491200000)/';
// 提取字符串中的数字部分作为时间戳
const timestamp = parseInt(dateStr.match(/\d+/)[0], 10);
var date = moment.utc(timestamp).local().format('YYYY-MM-DD HH:mm:ss');
console.log('date', date); // 输出 2021-06-01 06:00:00

内容的提问来源于stack exchange,提问作者Waleed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 20:57:00