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

使用JSON.parse处理载荷后日期对象值与原值不一致问题求解

问题根因
  • 基础代码错误:JSON.parse() 仅支持接收JSON格式字符串作为入参,如果你代码中的payload是直接定义的JS对象而非JSON字符串,入参时会触发隐式类型转换,可能出现不可预期的格式异常。
  • 核心原因是时区自动转换:你原始载荷里的日期是后缀带Z的ISO 8601格式,Z代表该时间为UTC(世界协调时间)零时区时间。JS环境在打印Date类型对象时,会默认转换为运行设备当前设置的本地时区,你设备的时区为GMT+11的澳大利亚东部夏令时,UTC时间11月20日20点叠加11小时时差后,自然会显示为11月21日的本地时间。两者对应的Unix时间戳完全一致,只是时区显示不同。
解决方案

如果你需要保证日期的显示结果和原始载荷完全一致,可以根据使用场景二选一:

  1. 保留原始日期字符串,不转换为Date对象
    调用JSON.parse()时传入第二个reviver回调函数,匹配到日期字段时直接返回原始字符串:
// 注意payload需为JSON字符串,不是JS对象
const job = JSON.parse(payload, (key, value) => {
  // 可根据字段名或者ISO日期格式正则匹配
  if (key === 'startDate' || key === 'endDate') {
    return value;
  }
  return value;
});
  1. 打印Date对象时主动输出UTC格式
    如果业务逻辑需要用到Date类型做时间运算,打印时调用UTC格式转换方法即可:
const startDate = job.timeDetails[0].windowTimes.startDate;
console.log(startDate.toUTCString());
// 输出结果:Sat, 20 Nov 2021 20:39:46 GMT,和原始载荷完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:54:07