schedule.js 3.79 KB
export function getDateMap(minYear, maxYear) {
  const DateMap = new Map();
  const getOneYear = (year) => {
    const yearDays = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ? 366 : 365;
    for (let i = 1; i <= yearDays; i++) {
      DateMap.set(toLocaleDateString(new Date(year, 0, i)), []);
    }
  }
  for (let i = minYear; i <= maxYear; i++) {
    getOneYear(i);
  }
  return DateMap
}

// 返回删除的日期
/**
 * 如果删除单次重复会议返回['2020-04-20'],
 * 如果删除此次及以后重复会议返回['future2020-04-20']
 */
export function getExcludeDate(data = []) {
  const excludeDateList = [];
  const futureList = [];
  data.forEach(item => {
    //删除此次及以后
    if (item.length > 10) {
      futureList.push(new Date(item.slice(6, 16).replace(/-/g, "/")).getTime());
    }
    //删除单次
    else {
      excludeDateList.push(item);
    }
  });
  return {
    excludeDateList,
    minFutureTime: Math.min(...futureList)
  };
}

// 返回跨天数
export function getNextDateList(startTime, endTime) {
  let days = 0;
  const nextDateList = [];
  if (startTime.getDate() !== endTime.getDate()) {
    //同一个月
    if (startTime.getMonth() == endTime.getMonth()) {
      days = endTime.getDate() - startTime.getDate();
    }
    //跨月
    else {
      // 一个月份有多少天new Date(year, month, 0).getDate()
      const startMonth = new Date(startTime.getFullYear(), startTime.getMonth(), 0).getDate();
      days = startMonth - startTime.getDate() + endTime.getDate()
    }
  } else {
    //跨一个月 不考虑
  }
  //返回跨天的日期数组
  for (let i = 0; i <= days; i++) {
    const newDate = new Date(startTime);
    const nextDate = toLocaleDateString(new Date(newDate.setDate(newDate.getDate() + i)));
    nextDateList.push(nextDate)
  }
  return nextDateList
}



export function getWeekNumber(year, month, days) {

  const isLeapYear = (year) => (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)

  const getMonthDays = (year, month) => [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || (isLeapYear(year) ? 29 : 28);
  //那一天是那一年中的第多少天
  for (var i = 0; i < month; i++) {
    days += getMonthDays(year, i);
  }

  //那一年第一天是星期几
  var yearFirstDay = new Date(year, 0, 1).getDay();

  var week = null;
  if (yearFirstDay == 0) {
    week = Math.ceil(days / 7);
  } else {
    days -= (6 - yearFirstDay + 1);
    week = Math.ceil(days / 7);
  }

  return week;
}


export function getBlankList(year) {
  const dateMap = getDateMap(year, year);
  const DateList = [];
  dateMap.forEach(function (value, key) {
    const keyDate = new Date(key);

    const year = keyDate.getFullYear();
    const month = keyDate.getMonth();
    const date = keyDate.getDate();
    const day = keyDate.getDay();
    // 生成年
    if (month === 0 && date === 1) {
      DateList.push({
        type: "year",
        value: year,
        dateStr: `${year}`
      });
    }
    //生成月
    if (date === 1) {
      DateList.push({
        type: "month",
        value: month + 1,
        dateStr: `${year}/${month + 1}`
      });
    }
    //生成周
    if (day === 0) {
      const rangeDate = new Date(year, month, date + 6);
      const rangeMonth2 = new Date(rangeDate).getMonth();
      const rangeDay2 = new Date(rangeDate).getDate();
      DateList.push({
        type: "week",
        value: `第${getWeekNumber(year, month, date)}周,${month + 1}${date}日 - ${
          rangeMonth2 == month ? "" : rangeMonth2 + 1 + "月"
          }${rangeDay2}日`,
        dateStr: `${year}/${month + 1}/${date}-week`
      });
    }
  })
  return DateList;
}

export function toLocaleDateString(date) {
  if (typeof date === 'string') {
    date = new Date(date)
  }
  return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`
}