这就是我完成它的方式:
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
天,当差异相同时,
缺陷在哪里?
答案 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)
您的代码如下:
var a = moment($('.start input').datepicker('getDate').getTime());
var b = moment($('.end input').datepicker('getDate').getTime());
d = a.diff(b, 'days')