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

Node.js日期解析不一致:带前导零月份的时区差异问题

Node.js v19.3.0日期解析时区不一致问题解析

问题现象回顾

console.log(new Date('2021-01-25').toISOString());
// Output: 2021-01-25T00:00:00.000Z

console.log(new Date('2021-1-25').toISOString());
// Output: 2021-01-24T22:00:00.000Z

原因分析

出现这种差异的核心是V8引擎对不同日期字符串格式的解析规则不同:

  • 2021-01-25是严格符合ISO 8601标准的日期格式,V8会直接将其解析为UTC时区的日期,所以转换为ISO字符串时显示的是当天0点UTC时间。
  • 2021-1-25属于非标准的日期格式(月份无前导零),V8会将其当作本地时区的日期来解析。从输出结果反推,你的本地时区应该是UTC+2(比如欧洲中部时间),本地时间的2021年1月25日0点,转换为UTC时区就是前一天的22点,所以输出对应的UTC时间字符串。

是否为已知问题

这是V8引擎长期存在的既定行为,Node.js因为底层依赖V8,所以继承了这个特性,属于已知的兼容性设计,并非软件bug。V8的这种处理逻辑是为了兼容各种非标准的日期输入场景,但确实容易造成开发者的混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:25:00