业务场景中总会遇到一些,日期范围为3个月,6个月,一年等等
比如:今天2024-11-06
3个月前日期:2024-08-06
6个月前日期:2024-05-06
一年前日期:2023-11-06
今天:2024-02-29
一年前:2月份没有29号,只能是2023-02-28
代码实现:
const getMouthAgo = (date, n) => {
let strDaysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
let strYear = date.getFullYear()
let strDay = date.getDate()
let strMonth = date.getMonth() + 1
// 一、解决闰年平年的二月份天数 //平年28天、闰年29天//能被4整除且不能被100整除的为闰年,或能被100整除且能被400整除
if ((strMonth - n) > 0) {
strMonth = strMonth - n
} else {
strMonth = strMonth - n + 12
strYear -= 1
}
if ((strYear % 4) === 0 && ((strYear % 100) !== 0 || (strYear % 400) === 0)) {
strDaysInMonth[2] = 29
}
strDay = Math.min(strDay, strDaysInMonth[strMonth])// 三、前一个月日期不一定和今天同一号,例如3.31的前一个月日期是2.28;9.30前一个月日期是8.30
if (strMonth < 10) { // 给个位数的月、日补零
strMonth = '0' + strMonth
}
if (strDay < 10) {
strDay = '0' + strDay
}
var datastr = strYear + '-' + strMonth + '-' + strDay
return datastr
}
JavaScript实现日期范围计算
1万+

被折叠的 条评论
为什么被折叠?



