javascript:计算两个日期之间的差异

javascript:计算两个日期之间的差异,javascript,Javascript,我想找出两次约会的区别。为此,我从另一个日期对象中减去了一个日期对象。我的代码如下: var d1 = new Date(); //"now" var d2 = new Date(2012,3,17); // before one year document.write("</br>Currrent date : "+d1); document.write("</br>Other Date : "+d2); document.write("</br>Diffe

我想找出两次约会的区别。为此,我从另一个日期对象中减去了一个日期对象。我的代码如下:

var d1 = new Date(); //"now"
var d2 = new Date(2012,3,17); // before one year
document.write("</br>Currrent date : "+d1);
document.write("</br>Other Date : "+d2);
document.write("</br>Difference : "+new Date(Math.abs(d1-d2)));
var d1=新日期()//“现在”
var d2=新日期(2012年3月17日);//一年前
文件。填写(“
当前日期:”+d1); 文件。填写(“
其他日期:”+d2); 文件。写(“
差异:”+新日期(数学abs(d1-d2));
但结果并不像我预期的那样:

当前日期:2013年2月17日星期日02:58:16 GMT-0500(美国东部时间)
其他日期:2012年1月21日星期六00:00:00 GMT-0500(美国东部时间)
差异:1971年1月28日星期四21:58:16 GMT-0500(美国东部时间)

我想计算它们之间的(1年)差异

谢谢你在找什么


如果您需要相当准确,我建议使用天作为您的单位。年有不同的天数,月也有不同的天数,所以说“1个月”或“1年”可能意味着不同的天数

var d1 = new Date(); //"now"
var d2 = new Date(2012,3,17); // before one year
var msPerDay = 1000*60*60*24;
document.write( ((d1 - d2) / msPerDay).toFixed(0) + " days ago");

因此,基本上最大的精确日期单位是一周,占7*86400秒。月份和年份没有精确定义。因此,假设您想说“1个月前”,如果这两个日期分别为
5.1.2013
5.2.2013
5.2.2013
5.3.2013
。并说“1个月零1天之前”,如果您有,例如,
5.1.2013
6.2.2013
,则您必须使用如下计算:

//dateFrom和dateTo必须是“Date”实例,并且to必须晚于/大于from。
函数dateDiff(dateFrom,dateTo){
变量自={
d:dateFrom.getDate(),
m:dateFrom.getMonth()+1,
y:dateFrom.getFullYear()
};
变量至={
d:dateTo.getDate(),
m:dateTo.getMonth()+1,
y:dateTo.getFullYear()
};
var daysFebruary=to.y%4!=0 | |(to.y%100==0&&to.y%400!=0)?28:29;
var daysInMonths=[0,31,daysFebruary,31,30,31,30,31,31,30,31];
如果(到.d<从.d){
to.d+=日/月[parseInt(to.m)];
from.m+=1;
}
如果(到.m<从.m){
至.m+=12;
from.y+=1;
}
返回{
天:到.d-从.d,
月份:到.m-从.m,
年份:至.y-自.y
};
}
//2016年6月1日至今的差异

console.log(dateDiff(新日期(2016,5,1),新日期())你在找这个吗


Math.ceil((新日期(2012,11,23)-新日期(2012,11,21))/864000)+1

那么您的计算结果必须是什么?天?秒?年?我想计算从那个日期起的天数、月数和年数…然后变得很棘手:)所以你想有“2年、5个月和23天”之类的东西吗?是的,我想做一些类似的事情。不要重新发明轮子,使用一个库,例如…@Exception,有什么更简单的选择吗?考虑到闰年和月内的可变天数,看起来尽可能小。@SimpleAsCouldBe可以查看我的答案日期对象的差异是毫秒的差异。除数
86400000
假定每年有固定的天数,我认为这是不完全正确的。@simpleas可能是86400000毫秒,相当于一天。因此,逻辑是正确的,是有意义的。因此,这将计算天数。OP不清楚,但他在寻找“2年7个月22天”。这就是问题的挑战所在。
var d1 = new Date(); //"now"
var d2 = new Date(2012,3,17); // before one year
var msPerDay = 1000*60*60*24;
document.write( ((d1 - d2) / msPerDay).toFixed(0) + " days ago");