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,看着很容易联想到是时区上的问题,一种合理的解释如下:

  1. 2024-08-05 是一种标准的日期格式,js认为其是UTC时间,而不是本地时间,因此初始化时根据时区加上了8小时转换为本地时间;
  2. 2024-8-5 不是标准的日期格式,js 认为是本地时间,初始化时不进行时区转换;
  3. 2024/08/05 被认为是一种本地时间格式,转换同上。

前端在碰到这种日期格式2024-08-05 的时候,要格外注意,如果还涉及时间比较,那可能会遇到和预期结果不一样的问题。

转载请注明出处。本文地址: https://www.qinshenxue.com/article/pay-attention-with-js-new-date.html
关注我的公众号