我有两个时间戳 e1 和 e2(均以 1970 年 1 月 1 日以来的毫秒数表示)。我想知道它们之间的年数差异是什么(包括部分年数 - 例如 2.74 是可接受的结果)。
由于闰年的原因,将 (e2 - e1) 除以 31536000000 不是正确的想法。有优雅的解决方案吗?
最佳答案
您评论中的想法很好。但是,您只需要确定是否只有一个时间戳是闰年。然后通过比较不带年份的时间戳,简单地找出第一个日期和第二个日期之间的差异。例如:http://jsfiddle.net/EN8qG/
function compareYears(t1, t2) {
var DAY = 24 * 3600 * 1000,
YEAR = 365 * DAY,
d1 = new Date(t1),
d2 = new Date(t2),
y1 = d1.getFullYear(),
y2 = d2.getFullYear(),
isLeap1 = new Date(y1, 1, 29).getMonth() == 1,
isLeap2 = new Date(y2, 1, 29).getMonth() == 1,
ms1 = t1 - Date.UTC(y1, 0, 0),
ms2 = t2 - Date.UTC(y2, 0, 0),
diff = ms2 - ms1,
rest;
if (isLeap1 && isLeap2) { //two leap years
rest = diff / YEAR;
} else if (isLeap1) {
rest = diff / (YEAR + DAY);
} else if (isLeap2) {
rest = diff / (YEAR + DAY);
} else {
rest = diff / YEAR;
}
return y2 - y1 + rest;
}
关于JavaScript:查找两个日期之间的差异(以年为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938627/