一、思路分析
1.获取当前年月日,判断是否是闰年
2.分析当前月有多少天,分类
3.for循环累加 / 减 每月天数
4.当前时加 / 减去相差天数,得到目标日期
5.时间函数处理,提取目标年月日
二、 好,请开始表演
function getNewDate(flag, many) {
const thirtyDays = [4, 6, 9, 11] // 30天的月份
const thirtyOneDays = [1, 3, 5, 7, 8, 10, 12] // 31天的月份
const currDate = new Date() // 今天日期
const year = currDate.getFullYear()
let month = currDate.getMonth() + 1
let targetDateMilli = 0
let GMTDate = '' // 中国标准时间
let targetYear = '' // 年
let targetMonth = '' // 月
let targetDate = '' // 日
let dealTargetDays = '' // 目标日期
const isLeapYear =
!!((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) // 是否是闰年
// console.log(isLeapYear, "isLeapYear");
let countDays = 0 // 累计天数
for (let i = 0; i < many; i++) {
if (flag === 'before') {
month = month - 1 <= 0 ? 12 : month - 1
} else {
month = month + 1 > 12 ? 1 : month + 1
}
thirtyDays.includes(month)
? (countDays += 30)
: thirtyOneDays.includes(month)
? (countDays += 31)
: isLeapYear
? (countDays += 29)
: (countDays += 28)
}
targetDateMilli = currDate.setDate(
currDate.getDate() - (flag === 'before' ? countDays : countDays * -1)
)
GMTDate = new Date(targetDateMilli)
targetYear = GMTDate.getFullYear()
targetMonth = GMTDate.getMonth() + 1
targetDate = GMTDate.getDate()
targetMonth = targetMonth.toString().padStart(2, '0')
targetDate = targetDate.toString().padStart(2, '0')
dealTargetDays = `${targetYear}-${targetMonth}-${targetDate}`
console.log(dealTargetDays, '处理的日期啊')
return dealTargetDays
}
三,调用
getNewDate("before", 3) //今天向前3个月
getNewDate("after", 2) //今天向后2个月
网友评论