使用.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天(假设一个月是28天,如2月)或1个月和4天(假设一个月是31天,如3月)?
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个错误
当你说“需要两个日期并返回一个字符串”你究竟返回什么?你在寻找两个日期之间的区别吗? – sbatson5
是的,我基本上寻找两个日期(或日期和现在)之间的差异。我可以自己做最后的字符串格式。这是我遇到问题的那些数值。 – JonnyRobbie
当我减去日期时,我不会以毫秒为单位获得差异吗?我neet能够将其转换为yy,mm,dd,hh,mm,ss,并且这些月份有问题。 – JonnyRobbie