使用Moment转换JSON日期时偏移量被忽略导致转换结果错误
问题原因
Moment没有忽略你日期中的+1100时区偏移,问题出在你代码里主动调用了.utc()方法:
- 你拿到的
/Date(1742130000000+1100)/格式中,1742130000000是标准UTC时间戳,对应的UTC时间为2025-03-16 13:00:00,+1100表示该时间对应的东11区当地时间为2025-03-17 00:00:00,也就是你预期的17-Mar-2025 - 调用
.utc()方法会强制将已经解析完成的带时区信息的时间转换为UTC时区展示,自然就得到了16-Mar-2025的结果,和偏移量被忽略无关。
解决方案
方案1:直接修改现有Moment代码
去掉.utc()调用即可保留原偏移对应的当地时间输出:
moment('/Date(1742130000000+1100)/').format('DD-MMM-YYYY')
执行后即可得到你预期的17-Mar-2025结果。
方案2:使用原生JS实现(无需引入第三方库)
目前Moment官方已经停止维护,更推荐用原生JS实现该转换逻辑:
const rawDate = '/Date(1742130000000+1100)/'; // 提取时间戳和时区偏移信息 const dateMatch = rawDate.match(/Date\((\d+)([+-])(\d{2})(\d{2})\)/); const timestamp = Number(dateMatch[1]); const offsetSign = dateMatch[2] === '+' ? 1 : -1; const offsetTotalMs = offsetSign * (Number(dateMatch[3]) * 3600 + Number(dateMatch[4]) * 60) * 1000; // 计算偏移后的实际时间 const targetDate = new Date(timestamp + offsetTotalMs); // 格式化输出为DD-MMM-YYYY格式 const formattedDate = targetDate.toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }).replaceAll(' ', '-');
内容的提问来源于stack exchange,提问作者Ayaz
相关产品推荐
相关产品推荐

