js封装获取当前周数据

 

/*
 * @Author: 张大碗 zhangjunhui@mangocosmos.com
 * @Date: 2023-09-20 17:36:15
 * @LastEditors: 张大碗 zhangjunhui@mangocosmos.com
 * @LastEditTime: 2023-10-08 11:04:08
 * @FilePath: \vue-vant2-template-master\vue-vant2-template-master\src\utils\week.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
// 根据参数日期获取具体日期信息
export const formatDate = function (date = new Date()) {
  let year = date.getFullYear()
  let month = date.getMonth() + 1
  let day = date.getDate()
  let week = ['日', '一', '二', '三', '四', '五', '六'][date.getDay()]

  const dateInfo = {
    date: new Date(date),
    dateStr: `${year}-${month.toString().padStart(2, '0')}-${day
      .toString()
      .padStart(2, '0')}`,
    dateStr1: `${month.toString().padStart(2, '0')}-${day
      .toString()
      .padStart(2, '0')}`,
    year,
    month,
    day,
    week,
    isToday: false,
  }

  const today = new Date()
  // 判断是否为当天
  if (
    today.getFullYear() === year &&
    today.getMonth() + 1 === month &&
    today.getDate() === day
  ) {
    dateInfo['isToday'] = true
  }
  return dateInfo
}

// 根据基准日期,获取长度为dayLenth的日期数组
export const setDate = function (date = new Date(), step = 7) {
  let weekData = []
  const week = date.getDay() > 0 ? date.getDay() - 1 : 0
  date = getDateByDate(date, week * -1)
  if (date.getDay() > 0) {
    for (let i = 0; i < step; i++) {
      weekData.push(formatDate(i == 0 ? date : getDateByDate(date, 1)))
    }
  } else {
    for (let i = 0; i < step; i++) {
      weekData.push(formatDate(getDateByDate(date, 1)))
    }
  }
  return weekData
}

// 根据基准日期获取前后某天的日期对象
export const getDateByDate = function (date = new Date(), range = 0) {
  date.setDate(date.getDate() + range)
  return date
}

/* 
    获取以baselineDate所在周的一周、前一周、下一周的日期和星期信息(切换周期也可通过参数dayLenth自行设置)
    baselineDate: 设置的基准日期(返回的日期列表的第一个日期)
    range: 以 baselineDate 为基准日期的前后天数范围(如基准日期的range为0,需要返回前7天日期,则range为-7,后7天则range为7)
    step: 需要获取的日期信息周期天数,默认获取baselineDate所在周的一周日期信息
    new Date().getDay() > 0 ? 0 : -7,  当周日时有bug 显示默认前7天,不然显示后7天
   */
export const getWeekDate = ({
  baselineDate = new Date(),
  range = new Date().getDay() > 0 ? 0 : -7,
  step = 7,
}) => {
  return setDate(getDateByDate(baselineDate, range), step)
}
// read me
//       // 获取当天所在星期数据
//       getWeekDate({ baselineDate: new Date() })

//       // 获取以当天为基准日期的上星期数据
//       getWeekDate({
//         baselineDate: new Date(),
//         range: -7,
//       })

//       // 获取以当天为基准日期的下星期数据
//       getWeekDate({
//         baselineDate: new Date(),
//         range: 7,
//       })
//       // 获取当天日期信息
// formatDate(getDateByDate());

 

posted @ 2023-10-12 18:46  前端张大碗  阅读(56)  评论(0编辑  收藏  举报