随月份变化的两个日期之间的差

Difference between two dates with changing month

本文关键字:两个 日期 之间 变化      更新时间:2023-09-26

获取天数差异的代码:

var sDate = new Date('2014','08','30','0','0','0');
var eDate = new Date('2014','09','02','0','0','0');
var daysApart = Math.abs(Math.round((sDate-eDate)/86400000));

结果为2。但是如果我使用这些日期:

var sDate = new Date('2014','08','25','0','0','0');
var eDate = new Date('2014','08','29','0','0','0');
var daysApart = Math.abs(Math.round((sDate-eDate)/86400000));

结果是3.

在这两个日期,它应该是3,但每次我切换月份,函数忽略一个月的第一天。我用

进行测试
var sDate = new Date('2014','08','31','0','0','0');
var eDate = new Date('2014','09','01','0','0','0');

,但结果是0。我在StackOverflow和Google Groups上搜索了很多,但没有找到解决方案。任何帮助都太好了!

是时候了解一下Date对象了。

从MDN:

构造函数:

new Date(year, month, day, hour, minute, second, millisecond);

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

运行一个简单的测试,看看输出的是什么:

console.log(new Date(2014,8,1,0,0,0));
console.log(new Date(2014,9,1,0,0,0));

那么现在在你的情况下发生了什么?

var sDate = new Date('2014','08','31','0','0','0');  

首先它们应该是整数而不是字符串

你说的是第8个月,也就是9月,因为我们是从0开始的。由于9月没有31天,浏览器不会抛出错误。它可以计算出当天是什么日子。结果它将日期改为10月1日。

某天某人决定这个月将以零为基础,你认为你创建了一个"30 of August",而实际上你创建了一个"30 of September"。在第二个例子中,你问的是9月31日,而9月31日并不存在,所以你得到的是9月30日。