两个时间段相差的年月日

 
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
function diffDate(date1, date2) {
let begin = new Date(date1);
let end = new Date(date2);

// 如果开始时间晚于结束时间,交换日期,并记录交换状态
let swap = false;
if (begin > end) {
let tmp = begin;
begin = end;
end = tmp;
swap = true;
}

// 分别取二个日期的年、月、日值
let d1 = begin.getDate();
let m1 = begin.getMonth() + 1;
let y1 = begin.getFullYear();
let d2 = end.getDate();
let m2 = end.getMonth() + 1;
let y2 = end.getFullYear();

// 获取每个月的天数,这里要注意一下闰年的2月
var getMonthDays = function (y, m) {
var aMonthDays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (m == 2 && (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))) {
return 29;
}
return aMonthDays[m];
};

let y, m, d;
let tempD = 0;
let tmpM = 0;
let tmpY = 0;

// 计算日,不足时向月份借
if (d2 >= d1) {
d = d2 - d1;
} else {
tmpM = -1;
d = getMonthDays(y1, m1) + d2 - d1;
}

// 计算月,不足时向年份借
if (m2 + tmpM >= m1) {
m = m2 + tmpM - m1;
} else {
tmpY = -1;
m = 12 + m2 + tmpM - m1;
}

// 计算年
y = y2 + tmpY - y1;

// 拼接距离字符串 输出格式如:"5天", "5月 05天", "5年 05月 05日"
let str = '';
if (y > 0) {
str = y + '年 ' + ('0' + m).substr(-2) + '月 ' + ('0' + d).substr(-2) + '天 ';
} else if (m > 0) {
str = m + '月 ' + ('0' + d).substr(-2) + '天 ';
} else if (d > 0) {
str = d + '天 ';
}

// 完整输出
return date1 + ' 比 ' + date2 + (swap ? ' 晚 ' : ' 早 ') + str;
}

console.log(diffDate('2000-01-01', '2001-01-01'));
console.log(diffDate('2017-06-30', '2018-06-30'));
</script>
</body>
</html>
posted @ 2023-02-03 13:02  外行的小白  阅读(20)  评论(0编辑  收藏  举报