获取时间段(根据开始时间以及结束时间获取 中间日期)

发布时间 2023-06-13 14:09:29作者: 刘世涛6192
  const getRangeDate = function (startDate: Date, endDate: Date) {
    const targetArr = []
    const start = new Date(startDate)
    const end = new Date(endDate)
    const startDateInfo = {
      year: start.getFullYear(),
      month: start.getMonth(),
      day: start.getDate(),
    }
    const endDateInfo = {
      year: end.getFullYear(),
      month: end.getMonth(),
      day: end.getDate(),
    }
    if (startDateInfo.year === endDateInfo.year) {
      //同年
      if (startDateInfo.month !== endDateInfo.month) {
        //同年,不同月份
        //获取开始时间所在月的月底日期
        const startMax = new Date(
          startDateInfo.year,
          startDateInfo.month,
          0
        ).getDate()
        const endNum = startMax - startDateInfo.day + endDateInfo.day
        for (let i = startDateInfo.day; i <= startDateInfo.day + endNum; i++) {
          if (i > startMax) {
            targetArr.push(
              `${endDateInfo.year}-${
                endDateInfo.month < 10 ? endDateInfo.month : endDateInfo.month
              }-${i - startMax < 10 ? +(i - startMax) : i - startMax}`
            )
          } else {
            targetArr.push(
              `${startDateInfo.year}-${
                startDateInfo.month < 10
                  ? startDateInfo.month
                  : startDateInfo.month
              }-${i < 10 ? i : i}`
            )
          }
        }
      } else {
        //同年同月
        for (let i = startDateInfo.day; i <= endDateInfo.day; i++) {
          targetArr.push(
            `${startDateInfo.year}-${
              startDateInfo.month < 10
                ? startDateInfo.month
                : startDateInfo.month
            }-${i < 10 ? i : i}`
          )
        }
      }
    } else {
      //不同年   【既然不同年那肯定也不同月】
      const startMax = new Date(
        startDateInfo.year,
        startDateInfo.month,
        0
      ).getDate()
      const endNum = startMax - startDateInfo.day + endDateInfo.day
      for (let i = startDateInfo.day; i <= startDateInfo.day + endNum; i++) {
        if (i > startMax) {
          targetArr.push(
            `${endDateInfo.year}-${
              endDateInfo.month < 10 ? endDateInfo.month : endDateInfo.month
            }-${i - startMax < 10 ? i - startMax : i - startMax}`
          )
        } else {
          targetArr.push(
            `${startDateInfo.year}-${
              startDateInfo.month < 10
                ? startDateInfo.month
                : startDateInfo.month
            }-${i < 10 ? i : i}`
          )
        }
      }
    }

    return targetArr
  }