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
相关产品推荐
相关产品推荐

