用js计算两个日期的时间差(年与天)

最近工作需要计算两个时间的日期差值,差值用多少年多少天表示,找了很多资料,好像都没有这种表达方式,然后自己修改了一个,可以得到正确的结果,记录下来,以供参考。

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;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值