似乎来自How to calculate the number of days between two dates using JavaScript?的解决方案
工作情况良好:
30.4.2016-1.5.2016它计算2天(以实数为单位)
29.2.2016-1.3.2016它计算3天(以实数为单位)
可能已经有人为这些情况找到了解决方案?
This function from link
function count_days(){ // Expecting resuls: positive when date1 > date2 ; negative when date1 < date2
var $obj = "dd.mm.YYYY";
var $obj2 = "dd.mm.YYYY";
if($obj2.value){
$start=$obj.value.split(".");
var date1 = new Date($start[2],$start[1],$start[0]); // Converted date to ("YYYY,mm,dd")
var $stop=$obj2.value.split(".");
var date2 = new Date($stop[2],$stop[1],$stop[0]); // Converted date to ("YYYY,mm,dd")
var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var diffDays = (date2.getTime() - date1.getTime())/(oneDay);
if(diffDays >= 0){
return Math.abs(diffDays)+1;
} else {
return diffDays-1;
}
}
return false; // No date2 nothing to compare
}
// Expecting resuls in full days (24h):
//(5.5.2016 - 5.5.2016) = 1 day (days equal)
//(29.2.2016 - 1.3.2016) = 1 day
//(30.4.2016 - 1.5.2016) = 1 day
//(4.5.2016 - 5.5.2016) = 2 days
//(29.2.2016 - null) = False
//(1.3.2016 - 29.2.2016) = -1 day
//(1.5.2016 - 30.4.2016) = -1 day
//(5.5.2016 - 4.5.2016) = -2 day
最佳答案
请注意,new Date()
的月份值从0开始(0-一月,1-二月等)。
var
a = new Date(2016, 01, 29), // Feb 29 2016 00:00:00
b = new Date(2016, 02, 1); // Mar 01 2016 00:00:00
alert((+b - +a) / 1000 / 60 / 60 / 24); // 1 day
表达式(+ b-+ a)-返回两个日期之间的差,以毫秒为单位(1秒= 1000毫秒)。
结果,您可以转换:
毫秒至秒:
(+b - +a) / 1000
= 86400秒秒至分钟:
(+b - +a) / 1000 / 60
= 1440分钟分钟至小时:
(+b - +a) / 1000 / 60 / 60
= 24小时小时到几天:
(+b - +a) / 1000 / 60 / 60 / 24
= 1天+ a和+ b-为您提供一个整数值,表示每个日期自1970年1月1日00:00:00以来的毫秒数。
阅读有关new Date()的更多信息
JavaScript日期基于毫秒的时间值
自1970年1月1日午夜以来。一天可容纳86,400,000
毫秒。 JavaScript日期对象范围是-100,000,000天到
相对于1970年1月1日UTC为100,000,000天。