js、vue处理日期,向前向后N个月,自动处理闰年、月末取n个月后的最后一天

js、vue处理日期,向前向后N个月,自动处理闰年、月末取n个月后的最后一天,第1张

js代码

function getNewDate(date, n) {//date 日期  n 前后相差月份
	let curDate = new Date(date),newDate = new Date(date),diff,remainder //curDate当前日期  newDate计算后日期  diff日期相差月份  remainder n对12的余数
	newDate.setMonth(curDate.getMonth() + n); //设置月份+n
	diff = newDate.getMonth() - curDate.getMonth(); //计算后月与之前月差值
	diff < 0 ? diff += 12: diff; //如果差值小于12 对其+12
	n > 0 ? remainder = n % 12 : remainder = n + 12 * Math.ceil((Math.abs(n) /12 )) //n>0时直接对12取余 n<0时,将其加上 n取绝对值后的年份(向上取整)* 12
	if(diff != remainder){
		return new Date(newDate.setMonth(newDate.getMonth(),0)) //如果diff与remainder不相等,此时的情况是Date.setMonth()方法自动处理了月末日期向后顺延到下个月,将其设置为上个月的最后一天,否则不进行处理
	}
	return newDate;
}

js调用 

getNewDate('2022-05-31',9)

vue代码

getNewDate(date, n) {//date 日期  n 前后相差月份
	let curDate = new Date(date),newDate = new Date(date),diff,remainder //curDate当前日期  newDate计算后日期  diff日期相差月份  remainder n对12的余数
	newDate.setMonth(curDate.getMonth() + n); //设置月份+n
	diff = newDate.getMonth() - curDate.getMonth(); //计算后月与之前月差值
	diff < 0 ? diff += 12: diff; //如果差值小于12 对其+12
	n > 0 ? remainder = n % 12 : remainder = n + 12 * Math.ceil((Math.abs(n) /12 )) //n>0时直接对12取余 n<0时,将其加上 n取绝对值后的年份(向上取整)* 12
	if(diff != remainder){
		return new Date(newDate.setMonth(newDate.getMonth(),0)) //如果diff与remainder不相等,此时的情况是Date.setMonth()方法自动处理了月末日期向后顺延到下个月,将其设置为上个月的最后一天,否则不进行处理
	}
	return newDate;
}

 vue调用

this.getNewDate('2022-05-31',9)

 效果图

PS:向前计算n传负值,向后传正值 

以下更简单粗暴的方法,同样可以达到相同的效果

js代码

function getNewDate(date, n) {//date 日期  n 前后相差月份 向前传负值
	let curDate = new Date(date),newDate = new Date(date)
	newDate.setMonth(curDate.getMonth() + n); //设置月份+n
	if(newDate.getDate() < curDate.getDate()){
		return new Date(newDate.setMonth(newDate.getMonth(),0)) 
	}
	return newDate;
}

vue代码 

getNewDate(date, n) {//date 日期  n 前后相差月份 向前传负值
	let curDate = new Date(date),newDate = new Date(date)
	newDate.setMonth(curDate.getMonth() + n); //设置月份+n
	if(newDate.getDate() < curDate.getDate()){
		return new Date(newDate.setMonth(newDate.getMonth(),0)) 
	}
	return newDate;
}

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1296451.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存