1. 程式人生 > 實用技巧 >獲取一段日期的工作日天數,週末天數

獲取一段日期的工作日天數,週末天數

/**
 * get work days
 * @param start 2020-09-01
 * @param end 2020-09-30
 */
export const getWeekDayCount = (start: string, end: string) => {
  const range = moment(end).diff(moment(start));
  const d = moment.duration(range);
  const days = d.asDays() + 1; // total days
  const weekDuration = Math.ceil(d.asWeeks()); // week number
  const newStart = moment(start)
    .add(weekDuration * 7, 'days')
    .format('YYYY-MM-DD'); // Calculate using the full week
  let weekendDays = 2 * weekDuration;

  if (newStart !== end) {
    // start week day !== end week day
    let startDay = moment(newStart).format('d');
    let endDay = moment(end).format('d');
    if (Number(endDay) > Number(startDay)) {
      weekendDays -= 2;
    }
  } else {
    const endWeek = moment(newStart).format('d'); // if start is 6 or 0, should += 1
    if (endWeek === '0' || endWeek === '6') {
      weekendDays++;
    }
  }
  return {
    weekDays: days - weekendDays,
    weekendDays: weekendDays,
  };
};