javascript - 在javascript中计算日期之间的差异

标签 javascript jquery date

我知道这个问题之前被问过多次,但建议的解决方案总是类似于

var diff = date1 - date2;

我的问题是我想得到年、月、日、...、秒的差异。

例如5y 3m 39d 12h 39i 32s

但是简单地除以差异对于我的目的来说太不准确了。 所以我不能假设每个月有 30.4375*24*60*60*1000 毫秒。

我需要确切差异! 因此,如果 date1 是 2 月 1 日,date2 是 3 月 1 日,则它应该显示 1m 而不是 28d(或闰年的 29d)!

谢谢。

最佳答案

首先,您需要找出哪个日期更大,将日期相减,然后确定它们是否为负值,借用较大的数字(类似于基本的多位减法)。

function DateDiff(a,b){
    if(b>a){ // We want a-b to be positive
        var c=b;
        b=a;
        a=c;
    }
    var s=a.getSeconds()-b.getSeconds();
    var mi=a.getMinutes()-b.getMinutes();
    var h=a.getHours()-b.getHours();
    var d=a.getDate()-b.getDate(); // Subtract days
    var m=a.getMonth()-b.getMonth(); // Subtract months
    var y=a.getYear()-b.getYear(); // Subtract years
    if(s<0){
        mi--;
        s+=60;
    }
    if(mi<0){
        h--;
        mi+=60;
    }
    if(h<0){
        d--;
        h+=24;
    }
    if(d<0){ // Need to borrow from months
        m--;
        d+=new Date(1900+b.getYear(),1+b.getMonth(),0).getDate();
    }if(m<0){ // Need to borrow from years
        y--;
        m+=12;
    }
    return [y,m,d,h,mi,s];
}
console.log('Mar 1 - Feb 2 (Leap Year):', DateDiff(new Date(2016,1,2),new Date(2016,2,1)));
console.log('Mar 1 - Feb 2 (Reg Year): ',DateDiff(new Date(2015,1,2),new Date(2015,2,1)));
console.log('Feb 1, 2017 - Feb 2, 2016: ',DateDiff(new Date(2017,1,1),new Date(2016,1,2)));
console.log('5:00 - 4:59: ', DateDiff(new Date(2015,7,1,17), new Date(2015,7,1,16,59)));

关于javascript - 在javascript中计算日期之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657242/

相关文章:

SQL 对一列中 2 个日期之间的数据求和

mysql - 我的sql时间段的属性类型是什么

javascript - 如何在 HTML5 Canvas 上进行正确的边界检查?

javascript - 如果使用ajax jquery文件上传上传文件,如何在php中获取上传的文件名

javascript - 一饮而尽 & 网页包 : ERROR in Entry module not found

jquery - 黑莓 css 位置 : fixed

python - 迭代 Isoweeks pandas

javascript - 如果有多个位置,如何寻址一个位置的两个 INPUT 的值

jquery - FlexSlider 显示 3 张主图像,而不是一张

javascript - 如何根据窗口大小更改DIV的高度