我知道这个问题之前被问过多次,但建议的解决方案总是类似于
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/