/**
* 计算两个日期相距年份,只计算年月日
* 处理了闰年的问题
*
* @param {Date} startDate 开始日期
* @param {Date} endDate 结束日期
* @returns {number} 年份差
*/
const diffDateYear = (startDate: any, endDate: any) => {
if (!startDate || !endDate) {
return message.error("日期不能为空");
}
// 如果开始日期大于结束日期,交换日期并将结果取负值
let isStartLarge = startDate > endDate;
if (isStartLarge) {
[startDate, endDate] = [endDate, startDate];
}
// 获取年份
const year1 = startDate.getFullYear();
const year2 = endDate.getFullYear();
// 计算年份范围内的总天数(考虑闰年)
let timeDistance = 0;
for (let i = year1; i <= year2; i++) {
timeDistance += isLeapYear(i) ? 366 : 365;
}
// 计算平均每年的天数
const ages = year2 - year1 + 1;
const averageDay = (timeDistance / ages).toFixed(2);
// 计算开始日期和结束日期之间的实际天数
const days = Math.floor((endDate - startDate) / (1000 * 60 * 60 * 24)) + 1;
// 计算年份差
const distanceAge = (days / averageDay).toFixed(2);
return isStartLarge ? Math.abs(-distanceAge) : Math.abs(parseFloat(distanceAge));
}
//是否闰年
const isLeapYear = (year: any) => {
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
}