JavaScript 使用 new Date 时可要注意了
原创
2024-8-5
09:05
编辑于
2024-8-5
09:26
先看一段测试代码。
new Date('2025-8-5').getTime() === new Date('2025/08/05').getTime()
new Date('2025-08-05').getTime() === new Date('2025/08/05').getTime()
在 Chrome v124 中测试结果如下。
在 FireFox v121 中测试结果如下。
甚至还在IE中测试了一下,当然IE就更离谱了。
从上面结果看,除了IE,能够得出一个结论,那就是:new Date('2024-8-5')
和 new Date('2024-08-05')
是不一样的,这两个日期字符串仅格式化稍有差别,那么初始化的日期是什么样的。
原来两个日期初始化后的小时是不一样的。使用这个格式2024-08-05
,得到的小时并不是0,而是8,看着很容易联想到是时区上的问题,一种合理的解释如下:
- 2024-08-05 是一种标准的日期格式,js认为其是UTC时间,而不是本地时间,因此初始化时根据时区加上了8小时转换为本地时间;
- 2024-8-5 不是标准的日期格式,js 认为是本地时间,初始化时不进行时区转换;
- 2024/08/05 被认为是一种本地时间格式,转换同上。
前端在碰到这种日期格式2024-08-05
的时候,要格外注意,如果还涉及时间比较,那可能会遇到和预期结果不一样的问题。
关注我的公众号