我正在尝试计算2个日期之间的天数。如果两个日期都在同一月份,则效果很好,但如果两个日期都不同,则效果很好。
这是一个返回正确数字(1天)的示例:

var oneDay = 24*60*60*1000;
var firstDate = new Date(2017,11,29);
var secondDate = new Date(2017,11,30);
var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
console.log(diffDays);


这是另一个例子。在这种情况下,计算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。
任何关于如何正确实现的想法都非常受欢迎。

最佳答案

现在的问题不是获得Days的方法(尽管由于leap秒,几天和令人困惑的时间,这可能会发生,请参阅:How do I get the number of days between two dates in JavaScript?)。

您的问题是,您期望Date构造器有不同的行为。

Date构造函数使用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.


指的是12月30日和2018年1月1日,因此答案说它们之间是31日和1日,因此为2天。

关于javascript - 计算两个日期之间的天Y/m/d返回错误的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47310718/

10-09 15:13