js当前日期向前推3个月时的日期

写在前面的话:
       项目中用到选择日期范围查询,默认起始时间是今天向前推3个月。上网查了半天,让我很失望,没找到准确的~~~
       本想封装一个函数,可以向前推也可以向后推n月或n年,但是抽不出时间,所以简单玩玩,以后优化。


一、思路分析

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个月

写在结尾

看着有点繁琐啊,就这?
纯手工制作,十八道工艺,无任何添加剂!!!
安全,放心,欢迎大家点阅。

你可能感兴趣的:(函数,js)