你几乎不需要时间。
d1 = new Date(2014, 3, 5); // April 5, 2014
d2 = new Date(2013, 1, 22); // February 22, 2013
diff = new Date(
d1.getFullYear()-d2.getFullYear(),
d1.getMonth()-d2.getMonth(),
d1.getDate()-d2.getDate()
);
这利用了Date 构造函数对负值的智能这一事实。例如,如果月数为负数,它将考虑到这一点并回溯当年。
console.log(diff.getYear(), "Year(s),",
diff.getMonth(), "Month(s), and",
diff.getDate(), "Days.");
>> 1 Year(s), 1 Month(s), and 11 Days.
您的计算是错误的 - 不是 14 天,而是 2 月的剩余 6 天和 4 月的前 5 天,所以是 11 天,因为计算机计算正确。
第二次尝试
考虑到@MattJohnson 的评论,这可能会更好:
dy = d1.getYear() - d2.getYear();
dm = d1.getMonth() - d2.getMonth();
dd = d1.getDate() - d2.getDate();
if (dd < 0) { dm -= 1; dd += 30; }
if (dm < 0) { dy -= 1; dm += 12; }
console.log(dy, "Year(s),", dm, "Month(s), and", dd, "Days.");