计算日期之间的天数,不同月份

时间:2017-03-29 08:43:01

标签: javascript date

所以我正在玩JavaScript的Date对象,我碰到了一些我觉得有点奇怪的东西。
我试图找出两个给定日期之间的天数,为此我使用下面的公式:

var oneDay = 24*60*60*1000;
var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));

如果你选择2017-05-28& 2017-05-30它返回 2天 - 因为它应该

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

如果你带上2017-05-30& 2017-06-01它返回 1天 - 应该是2天

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

如果你带上2017-05-30& 2017-06-01它返回 3天 - 应该是2天

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

3 个答案:

答案 0 :(得分:1)

我曾经用了半个小时试图找出问题所在 - 并在发布后10秒我搞清楚了。

问题是,日期对象需要:

  • Jan,as 0
  • 2月,1
  • ...
  • ...
  • 11月,10岁
  • Dec,as 11

答案 1 :(得分:0)

请记住,Date构造函数还允许来自逻辑范围之外的值。

示例:new Date(2017, -2, 30)

来源: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

  

其中Date被调用为具有多个参数的构造函数,if   值大于它们的逻辑范围(例如13提供为   月份值或分钟值为70),相邻值将为   调整。例如。新日期(2013,13,1)相当于新的   日期(2014,1,1),都创建了2014-02-01的日期(请注意   月是0基础)。与其他值类似:新日期(2013年,2,1,1,   70)相当于新的日期(2013年,2日,1日,1日,10日),它们都创造了一个   日期为2013-03-01T01:10:00。

答案 2 :(得分:-1)

您可以使用以下代码计算两个日期之间的差异(天数)。

var dateOne = new Date(firstDate);
var dateTwo = new Date(secondDate);
var dateDifference = Math.floor((dateTwo - dateOne) / 86400000);
console.log(dateDifference);