使用 .getTime 将日期转换为毫秒:
var date1 = new Date(),
date2 = new Date(someDate),
diff = Math.abs(date1.getTime() - date2.getTime());
// then convert into years, months, etc
编辑:你不能摆脱平均几个月的长度,因为问题通常是模棱两可的。例如,如果计算 2 月 3 日和 3 月 10 日之间的差异是 1 个月 7 天(假设 2 月是 28 天)或 1 个月 4 天(假设 3 月是 31 天)?
EDIT2:纠正了我真正令人震惊的数学。
EDIT3:实际上,考虑到这一点,任何正常人都会将第一个月的日期转换为最后一个月,并使用它来计算天数的差异。所以:
var date1 = new Date(),
date2 = new Date(1981, 10, 18);
switch = (date2.getTime() - date1.getTime()) < 0 ? false : true, // work out which is the later date
laterDate = switch ? date2 : date1;
earlierDate = switch ? date1 : date2;
dayDiff = laterDate.getDate() - earlierDate.getDate(),
monthDiff = laterDate.getMonth() - earlierDate.getMonth(), // javascript uses zero-indexed months (0-11 rather than the more conventional 1-12)
yearDiff = laterDate.getFullYear() - earlierDate.getFullYear(),
months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (dayDiff < 0) {
monthDiff--;
dayDiff += months[laterDate.getMonth()-1]; // -1 because we want the previous month
}
if (monthDiff < 0) {
yearDiff--;
monthDiff += 12;
}
console.log(yearDiff+' years, '+monthDiff+' months, '+dayDiff+' days');
我认为这让我们大部分时间都在那里,但我们仍然必须考虑闰年
编辑4:纠正了几个(有时但不幸的是,并不总是取消)1个错误