Javascript Date.getTime 函数没有返回正确的值,或者我做错了什么

Javascript Date.getTime function doesn't return the correct value or I'm doing something wrong

本文关键字:或者 什么 错了 函数 getTime Date 返回 Javascript      更新时间:2023-09-26

我正在尝试计算给定日期的时间戳(小时和分钟现在并不重要)。
我不是在寻找计算两个日期之间的天数,但作为计算时间戳问题的示例,让我们看一下以下代码片段,该代码片段计算两个日期之间的天数:

console.log(((new Date(2017,2,10)).getTime() - (new Date(2017,1,31)).getTime())/86400000);

这个片段为我打印 7,而如果我正确计算,它实际上应该打印 10 .我知道我的代码有问题,但我不知道是什么。

Date构造函数中的月份是 0 索引的,所以 0 是 1 月,1 是 2 月,依此类推,此外参数可能会溢出(new Date(2017,11,32)实际上是 Mon Jan 01 2018 00:00:00 )。因此,在您的示例中,日期实际上是:

new Date(2017,1,31)
Fri Mar 03 2017 00:00:00
new Date(2017,2,10)
Fri Mar 10 2017 00:00:00

因此,结果是正确的。

代码中返回的值绝对没问题。根据Javascript MDN Documentation,对于函数中的Month参数,可以传递以下允许值,否则会自动调整-

表示

月份的整数值,从 0 表示 1 月开始,到 11 表示 12 月。

因此,在您的情况下,由于 31 February 2017 不存在,Date 对象会自动调整并使用值 03 March 2017 进行初始化。另一个日期初始化为值 10 March 2017 。因此,差异正确为 7 天。以下是 MDN 文档中关于调整的简短说明-

其中 Date 作为具有多个参数的构造函数调用,如果值大于其逻辑范围(例如,提供 13 作为月份值或 70 作为分钟值),则将调整相邻值。 例如,new Date(2013, 13, 1) 等效于 new Date(2014, 1, 1),两者都为 2014-02-01 创建一个日期(请注意,月份是从 0 开始的)。对于其他值也是如此:new Date(2013, 2, 1, 0, 70) 等效于 new Date(2013, 2, 1, 1, 10),两者都为 2013-03-01T01:10:00 创建一个日期。