Javascript 计算两个日期之间的天数Y/m/d返回错误数字

Javascript 计算两个日期之间的天数Y/m/d返回错误数字,javascript,Javascript,我在计算两次约会之间的天数。如果两个日期都在同一个月,情况会很好,但如果两个日期在不同的月份,情况就不一样了。 下面是一个示例,其中它返回正确的数字(1天): 这里是另一个例子。在本例中,计算11月最后一天和12月1日之间的天数时,应为1,但返回2 var oneDay = 24*60*60*1000; var firstDate = new Date(2017,11,30); var secondDate = new Date(2017,12,1); var diffDays = Math.

我在计算两次约会之间的天数。如果两个日期都在同一个月,情况会很好,但如果两个日期在不同的月份,情况就不一样了。 下面是一个示例,其中它返回正确的数字(1天):

这里是另一个例子。在本例中,计算11月最后一天和12月1日之间的天数时,应为1,但返回2

var oneDay = 24*60*60*1000; 
var firstDate = new Date(2017,11,30);
var secondDate = new Date(2017,12,1);
var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
console.log(diffDays);
我观察到,如果月份不同,它返回错误的数字,如果一个月或两个月的一致性少于31天,它会将少于31天的月份中缺少的天数相加,在本例中为1,因为11月有30天,12月31日,1+1(缺少的天数)=2。
任何关于如何正确处理的想法都是非常受欢迎的。

您的舍入函数很可能是导致问题的原因。尝试
Math.floor
取而代之的是向下取整,这可能会解决您的问题。

您的取整函数很可能是导致问题的原因。尝试
Math.floor
取而代之的是四舍五入,这可能会解决您的问题。

使用
新日期(年、月、日)
创建日期时,请注意
month
参数是以0为基础的,而不是以1为基础的。阅读更多关于


因此,在第二个示例中,您计算的是2017年12月30日至2018年1月1日之间的日期,实际上是2天而不是1天。

使用
新日期(年、月、日)
创建日期时,请注意
参数是基于0而不是基于1的。阅读更多关于


因此,在第二个示例中,您正在计算2017年12月30日至2018年1月1日之间的日期,实际上是2天而不是1天。

您现在的问题不是获得天数的方法(尽管由于闰秒、天数和混乱的时间,这是一个可能发生的问题,请参阅:)

你的问题是,你期望不同的行为过时

日期构造函数使用0个索引月,因此

var firstDate = new Date(2017,11,30); // 30th of december of 2017
var secondDate = new Date(2017,12,1); // 1st of January of 2018
// Second date is the 1st of january because it rolls over.

new Date(2016,0,1) // the 1st of January of 2016.

参考2018年12月30日和1月1日,答案是31日和1日之间,因此2天。

你现在的问题不是获得天数的方法(尽管由于闰秒、天数和混乱的时间,这是一个可能发生的问题,请参阅:)

你的问题是,你期望不同的行为过时

日期构造函数使用0个索引月,因此

var firstDate = new Date(2017,11,30); // 30th of december of 2017
var secondDate = new Date(2017,12,1); // 1st of January of 2018
// Second date is the 1st of january because it rolls over.

new Date(2016,0,1) // the 1st of January of 2016.

参考2018年12月30日和1月1日,因此答案为31日和1日之间,因此为2天。

不要手动执行此操作。使用momente.js或其他成熟的timedate js库检查此帖子谢谢@dimir。这很有帮助。感谢其他人的帮助。不要手动操作。使用momente.js或其他成熟的timedate js库检查此帖子谢谢@dimir。这很有帮助。多亏了其他人的帮助。哦,我明白了。。非常感谢,我不知道。只是好奇为什么这个答案比我的答案更被接受,因为我先回答了(只有一分钟),但答案基本上是一样的?此外,我还提供了一个指向Date object.OOh的MDN文档的链接。。非常感谢,我不知道。只是好奇为什么这个答案比我的答案更被接受,因为我先回答了(只有一分钟),但答案基本上是一样的?此外,我还提供了一个指向Date对象的MDN文档的链接。