从日期范围计算工作日

时间:2018-07-04 08:09:29

标签: javascript date momentjs

鉴于日期范围,需要计算天数,其中不包括指定的假期和每周(每周的下班日)某些天。

假期将是array个日期,但是每周的休假时间将是一个数字[0, 1, 2, 3, 4, 5, 6],代表一周中的几天。

以下是我到目前为止尝试过的内容:

export const calculateWorkingDays = (startDate, endDate, weeklyOffDays, holidays) => {
    // Get difference between start and end dates
    // Not used other parameters yet
    return startDate.diff(endDate, 'days');
}

我还不知道如何从数字表示中获取weekly off days日期,以及如何从日期范围中减去给定的天数(每周休息日和节假日),然后获得剩余天数。

1 个答案:

答案 0 :(得分:1)

您可以从startDate循环到endDate,并检查每个项目是weeklyOffDays中包含星期几还是holidays中包含星期几数组。

这里有一个实时示例,假设weeklyOffDays是整数数组,而holidays是ISO 8601字符串数组。

const calculateWorkingDays = (startDate, endDate, weeklyOffDays, holidays) => {
  let count = 0;
  const start = moment(startDate);
  const end = moment(endDate);
  while( start.isBefore(end) ){
    if( !weeklyOffDays.includes(start.day()) && !holidays.includes(start.format('YYYY-MM-DD'))){
      count++;
    }
    start.add(1, 'day');
  }
  return count;
}

const res = calculateWorkingDays('2018-07-01', '2018-07-15', [5, 6], ['2018-07-04']);
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>