JavaScript中getMonth()返回值偏移2?已知0索引为何结果不符合预期
问题原因
你遇到的偏差是本地时区与UTC时区不一致导致的:
Date.getMonth()是基于运行环境的本地时区计算返回月份,而Node.js中直接打印Date实例默认输出的是UTC标准时间字符串,二者的时区基准不同,自然会出现结果不匹配的情况。- 你使用的时间戳
1622513190000对应的UTC时间为2021-06-01T02:06:30.000Z,若你的Node运行环境时区设置为UTC-10及以西的区域,此时本地时间会落在2021年5月31日,getMonth()返回5月对应的0索引值4,和你得到的结果完全一致。
解决方法
- 如果你需要获取UTC时间对应的月份,替换使用
myDate.getUTCMonth()即可,该方法会基于UTC时区计算月份,你的场景下调用会返回你预期的5。 - 你可以通过
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)查看当前Node环境的默认时区,也可以在启动脚本时手动指定时区为UTC,避免本地时区干扰:
此时运行你的原有代码就会返回预期的5。TZ=UTC node your_script.js
内容的提问来源于stack exchange,提问作者pacificpythagoras
相关产品推荐
相关产品推荐

