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

该代码段定义了一个getNewDate函数,根据传入的标志(向前或向后)和月数,计算新的日期。它首先判断当前年份是否为闰年,然后根据月份确定天数,通过for循环累加或减少天数,最后更新并返回目标日期。
摘要由CSDN通过智能技术生成

一、思路分析

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



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚沪漂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值