最近工作需要计算两个时间的日期差值,差值用多少年多少天表示,找了很多资料,好像都没有这种表达方式,然后自己修改了一个,可以得到正确的结果,记录下来,以供参考。
1.计算当月天数
// 判断当前月天数
function getDays (mouth, year) {
let days = 30
if (mouth === 2) {//2月份的天数需要判断是否是闰年,闰年29天,平年28天
days = year % 4 === 0 ? 29 : 28
} else if (mouth === 1 || mouth === 3 || mouth === 5 || mouth === 7 || mouth === 8 || mouth === 10 || mouth === 12) {
// 月份为:1,3,5,7,8,10,12 时,为大月.则天数为31;
days = 31
}
return days
}
2.判断某一年的天数
// 判断某一年的天数
function yearDays(year){
let leapYear = false, sum_day = 0, month_arr = [4, 6, 9, 11];
if (year % 100 === 0) { // 年份是整百
leapYear = year % 400 === 0
} else {
leapYear = year % 4 === 0
}
// 下面计算每个月的天数
for (let i = 1; i < 13; i++) {
if (i === 2) {
sum_day += leapYear ? 29 : 28
} else if (month_arr.includes(i)) {
sum_day += 30
} else {
sum_day += 31
}
}
return sum_day
}
3.判断今年剩余的天数
// 判断今年剩余的天数
function reyearDay(){
// 今天的标准时间
let today = new Date();
// 本年最后标准时间
let endYear = new Date(today.getFullYear(), 11, 31, 23, 59, 59);
// 一天的毫秒数
let msPerDay = 24 * 60 * 60 * 1000;
// 计算剩余毫秒除以一天的毫秒数,就是天数
return Math.round((endYear.getTime() - today.getTime()) / msPerDay);
}
4.计算某年某月之前的天数
// 计算某年某月之前的天数
function mdays(y,m,d){
let days = d;//加上当月的事件
let m1 = m - 1;//去掉当月的时间
if(m>1){
for(let i = 0;i<m1;i++){
days = days + getDays(i+1,y)//
}
}
return days;
}
合理运用1/2/4的三个函数,计算两个日期之差(年与天)
//srarTime:2017-09-20,endTime:2023-02-05
const dateDeath = (starTime,endTime) => {
//转换时间
let startime = starTime.replace(new RegExp("-", "gm"), "/");
let endtime = endTime.replace(new RegExp("-", "gm"), "/");
startime = new Date(value);
endtime = new Date(endtime);
//得到两个时间的年月日
var start={
year:startime.getFullYear(),
month:startime.getMonth() + 1,
day:startime.getDate()
}
var end = {
year:endtime.getFullYear(),
month:endtime.getMonth()+1,
day:endtime.getDate()
}
//得到两个时间的月+日的天数
startDays = mdays(start.year,start.month,start.day)
endDays = mdays(endtime.year,endtime.month,endtime.day)
var diff={};
//日期年份差值
diff.year= end.year - end.year;
//天数差值
diff.day =start.mday - start.mday;
let chastr = '';
//天数差值大于0时
if(diff.day>0){
if(diff.year>0){
chastr = diff.year+'年'+diff.day+'天'
}else{
chastr = diff.day+'天'
}
}else if(diff.day==0){//天数差值等于0时
if(diff.year>0){
chastr = diff.year+'年'
}else{
chastr = '今日逝世'
}
}else if(diff.day<0){//天数差值小于0时,从endtime中借一年
diff.year = diff.year-1;
let yday =yearDays(end.year - 1);
diff.day = diff.day + yday;
if(diff.year>0){
chastr = diff.year + '年'+diff.day + '天'
}else{
chastr = diff.day + '天'
}
}
return chastr;
}