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

时间:2016-03-05 11:57:37

标签: javascript datetime

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

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

这个片段打印7对我而言,如果我正确地做了数学,它实际上应该打印10。 我知道我的代码有问题,但我不知道它是什么。

2 个答案:

答案 0 :(得分:2)

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

因此结果是正确的。

答案 1 :(得分:1)

您的代码中返回的值绝对没问题。根据{{​​1}},对于函数中的$(document).ready(function() { $("ul li div").click(function(){ alert ($(this).parent().index()+1); }); }); 参数,您可以传递以下允许值,否则会自动调整它们 -

  

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

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

  

如果将Date作为具有多个参数的构造函数调用,如果值大于其逻辑范围(例如,13为月值或70为分钟值),则将调整相邻值。例如。新日期(2013,13,1)相当于新日期(2014,1,1),均创建2014-02-01的日期(请注意,该月份为0)。类似地,对于其他值:新日期(2013,2,1,0,70)等同于新日期(2013,2,1,1,10),它们都创建2013-03-01T01:10:00的日期。