如果您进行大量日期操作,我建议您使用 Moment.js。使用 Moment.js diff 函数,Moment.js 将对差异进行精确计算,而不仅仅是减去 Date 对象上的年份部分。
跨越 2 年的示例:
var Start = new Date("June 26, 2012 11:13:00");
var End = new Date("January 1, 2015 11:13:00");
var years = moment(End).diff(Start, 'years');
var yearsBetween = [];
for(var year = 0; year < years; year++)
yearsBetween.push(Start.getFullYear() + year);
返回:
yearsBetween
[2012, 2013]
跨越 3 年的示例:
var Start = new Date("June 26, 2012 11:13:00");
var End = new Date("June 26, 2015 11:13:00");
var years = moment(End).diff(Start, 'years');
var yearsBetween = [];
for(var year = 0; year < years; year++)
yearsBetween.push(Start.getFullYear() + year);
返回:
yearsBetween
[2012, 2013, 2014]
第一个示例仅跨越 2 年,因为它没有完整的 3 年,即使 End 的年份比 Start 的年份晚 3 年。晚年开始日期的同一月/日以外的任何时间都算作一整年。这就是第二个示例跨越整整 3 年的原因。
编辑:
如何在没有 moment.js 的情况下进行 diff 示例:
const msPerYear = 1000 * 60 * 60 * 24 * 365;
function diffYear(d1, d2) {
const utc1 = Date.UTC(d1.getFullYear(), d1.getMonth(), d1.getDate());
const utc2 = Date.UTC(d2.getFullYear(), d2.getMonth(), d2.getDate());
return Math.floor((utc2 - utc1) / msPerYear);
}
跨越 7 年:
var Start = new Date("June 26, 2012 11:13:00");
var End = new Date("January 1, 2020 11:13:00");
var diff = diffYear(Start, End);
返回:
7
跨越 8 年:
var Start = new Date("June 26, 2012 11:13:00");
var End = new Date("June 26, 2020 11:13:00");
var diff = diffYear(Start, End);
返回:
8
注意:计算与闰年的差异时会变得复杂,因为它们仅在闰年的年份更改每年的毫秒数。