[原创]JS端计算一段时间内工作日的天数,排除周末和法定节假日,同时考虑到调休日...
时间: 2024-03-16 10:42:46 浏览: 68
实现这个功能需要以下几个步骤:
1. 获取法定节假日列表和调休日列表,这些数据可以从后端接口或者本地存储中获取。
2. 计算起止日期之间的所有日期,并将它们存储在一个数组中。
3. 遍历数组,对于每个日期,判断它是否是周末或者法定节假日或者调休日。如果是,排除它。
4. 最后计算剩余的日期数量,即为工作日的天数。
下面是一个使用 JavaScript 实现的示例代码:
```javascript
// 假设法定节假日和调休日的数据分别存储在 holidayList 和 adjustedList 中
function getWorkingDays(startDate, endDate, holidayList, adjustedList) {
// 计算起止日期之间的所有日期
const dateList = [];
let currentDate = new Date(startDate);
while (currentDate <= endDate) {
dateList.push(new Date(currentDate));
currentDate.setDate(currentDate.getDate() + 1);
}
// 排除周末和法定节假日和调休日
let workingDays = 0;
dateList.forEach(date => {
// 判断是否是周末
if (date.getDay() !== 0 && date.getDay() !== 6) {
// 判断是否是法定节假日
const isHoliday = holidayList.some(holiday => {
return holiday === date.toISOString().slice(0, 10);
});
// 判断是否是调休日
const isAdjust = adjustedList.some(adjust => {
return adjust === date.toISOString().slice(0, 10);
});
if (!isHoliday || isAdjust) {
workingDays++;
}
}
});
return workingDays;
}
// 调用示例
const holidayList = ["2022-01-01", "2022-01-02", "2022-01-03"]; // 假设法定节假日为2022年元旦
const adjustedList = ["2022-01-08"]; // 假设2022年元旦调休到了2022年1月8日
const startDate = new Date("2022-01-01");
const endDate = new Date("2022-01-10");
const workingDays = getWorkingDays(startDate, endDate, holidayList, adjustedList);
console.log(workingDays); // 输出结果为 3,即2022年1月4日、1月5日、1月7日为工作日
```
这个示例代码比较简单,实际开发中还需要考虑一些边界情况和优化性能的问题,例如如何提前加载节假日和调休日数据,如何处理时区等问题。
阅读全文