我知道这个问题之前曾被问过多次,但是建议的解决方案总是像
var diff = date1 - date2;
我的问题是我想获得年,月,日,...秒的差异。
因此,例如
5y 3m 39d 12h 39i 32s
但是,就我的目的而言,简单地划分差异实在是不准确的。
所以我不能假设每个月都有
30.4375*24*60*60*1000
毫秒。我需要确切的区别!
因此,如果
date1
是2月1日,而date2
是3月1日,则应显示1m,而不是28d(或leap年的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)));