手动传参实例化new Date()返回错误日期的原因咨询
问题原因及解决办法
核心原因1:月份参数是0开始索引的
JavaScript的Date构造函数有个反直觉的设计——月份参数从0开始计数:0对应1月,1对应2月……10对应的是11月,不是你以为的10月。这是日期“跳月”的直接原因。
核心原因2:时区导致的日期偏移
你看到的2022-11-09是UTC标准时间的显示结果。如果你的本地时区是东八区(比如北京时间),new Date(2022,10,10)对应的本地时间是2022年11月10日00:00,转成UTC时间就是前一天的16:00,所以打印出来会显示2022-11-09。
日历组件为什么正常?
日历选择器已经帮你做了两层适配:
- 自动把你选中的“10月”转换成了
Date要求的索引值9; - 输出时是基于本地时区展示日期,不会直接显示UTC格式的偏移结果,所以看起来和预期一致。
怎么修正代码?
- 要构造2022年10月10日的日期,把月份参数减1就行:
const newDate = new Date(2022, 9, 10); - 如果想避免时区偏移的显示问题,可以用
toLocaleDateString()方法输出本地格式的日期:console.log(newDate.toLocaleDateString()); // 会输出类似"2022/10/10"的本地格式
内容的提问来源于stack exchange,提问作者Vadim Tregubenko
相关产品推荐
相关产品推荐

