检查两个日期之间的天数(失败)

时间:2014-02-27 08:40:55

标签: javascript date datediff

这就是我完成它的方式:

var sDate = $('.start input').datepicker('getDate').getTime();
var nDate = $('.end input').datepicker('getDate').getTime();            
var dias = Math.floor((nDate - sDate)/1000/60/60/24) + 1;

但它失败了

20/03/2014 to 30/03/2014 - > 11

21/03/2014 to 31/03/2014 - > 10天,当差异相同时,

缺陷在哪里?

4 个答案:

答案 0 :(得分:1)

你必须圆而不是地板。

 var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
 var sDate = $('.start input').datepicker('getDate').getTime();
 var nDate = $('.end input').datepicker('getDate').getTime(); 

 var diffDays = Math.round(Math.abs((nDate - sDate)/(oneDay)));

答案 1 :(得分:1)

正确的代码就是这样(如上所述@ vinod-gubbala):

var dias = Math.round((nDate - sDate)/(1000*60*60*24));

基本上,你得到天数的差异(毫秒)除以1000(音乐会到秒)* 60(每分钟60秒)* 60(每小时60分钟)* 24(一天24小时) )。

不知道为什么要在最后添加+1。当然,这将与完整的日子一起工作,我的意思是,将日期与他同时进行比较。

您遇到的问题可能与daylight saving time有关。请记住,对于2014年,3月的最后一个星期日(3月30日)有一个时间变化(至少在欧洲),所以有一个小时,你的功能,因为它做一个地板,四舍五入,你失去了一天。

问候。

答案 2 :(得分:0)

我这样做了:

var d1 = new Date('2013-03-20 00:00:00')
var d2 = new Date('2013-03-30 00:00:00')
(d2.getTime() - d1.getTime()) / 1000 / 60 / 60 / 24 + 1; //11

然后这个:

var d1 = new Date('2013-03-21 00:00:00')
var d2 = new Date('2013-03-31 00:00:00')
(d2.getTime() - d1.getTime()) / 1000 / 60 / 60 / 24 + 1; //11

因此没有缺陷,很可能是在创建jQuery datepicker的 Date()对象时出错。我建议你做以下事情:

console.log(nDate,sDate);
console.log(((nDate - sDate)/1000/60/60/24)+1);

看看这两个日期对你有什么影响。你可能会在那里发现错误。

答案 3 :(得分:0)

查看http://momentjs.com/

您的代码如下:

var a = moment($('.start input').datepicker('getDate').getTime());
var b = moment($('.end input').datepicker('getDate').getTime());
d = a.diff(b, 'days')