我想找到两个日期之间的区别。为此,我从另一个Date对象中减去了一个Date对象。我的代码如下:
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)));
但结果并不像我预期的那样:
当前日期:太阳2月17日2013 02:58:16 GMT-0500(EST)
其他日期:2012年1月21日星期六00:00:00 GMT-0500(EST)
差异:1971年1月28日星期四21:58:16 GMT-0500(EST)
我想计算它们之间的(1年)差异。
由于
答案 0 :(得分:4)
如果您需要相当准确,我建议您使用天数作为您的单位。年份有不同的天数,所以几个月,所以说“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");
答案 1 :(得分:3)
所以从根本上说,最大的确切日期单位是周,其占7 * 86400秒。月份和年份不是明确定义的。所以假设你想说“1个月前”,如果两个日期是例如5.1.2013
和5.2.2013
或5.2.2013
和5.3.2013
。并说“1个月和1天前”如果你有例如5.1.2013
和6.2.2013
,那么你必须使用这样的计算:
// dateFrom and dateTo have to be "Date" instances, and to has to be later/bigger than from.
function dateDiff(dateFrom, dateTo) {
var from = {
d: dateFrom.getDate(),
m: dateFrom.getMonth() + 1,
y: dateFrom.getFullYear()
};
var to = {
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, 30, 31];
if (to.d < from.d) {
to.d += daysInMonths[parseInt(to.m)];
from.m += 1;
}
if (to.m < from.m) {
to.m += 12;
from.y += 1;
}
return {
days: to.d - from.d,
months: to.m - from.m,
years: to.y - from.y
};
}
// Difference from 1 June 2016 to now
console.log(dateDiff(new Date(2016,5,1), new Date()));
正如我所说,它变得棘手;)
答案 2 :(得分:2)
您在寻找this吗?
Math.ceil((new Date(2012, 11, 23) - new Date(2012, 11, 21)) / 86400000) + 1
答案 3 :(得分:0)
你在找这个吗?
Math.ceil((新日期(2012年,11,23) - 新日期(2012年,11,21))/ 864000)+ 1