似乎来自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天。

07-24 09:43
查看更多