【发布时间】:2019-10-29 11:03:45
【问题描述】:
我想确定下一个工作日/工作日并考虑假期。对于工作日,我不包括周日和周六。对于假期,我排除了一组日期对象。
我已经构建了一个 do-while 循环来增加至少一天,如果是周末或假期继续增加。虽然我的尝试有效,但我相信通过使用最新的节点/ES 语法特性还有很大的改进空间。请注意,我仅限于使用任何版本的原生 JavaScript,但最好使用现代功能(例如,箭头函数等)。
我排除周末的条件是:
function nextWorkingDay(date) {
do {
date.setDate(date.getDate() + 1);
} while (!(date.getDay() % 6));
return date;
}
结合排除节假日的尝试是:
const holidays = [new Date(2019, 11, 24), new Date(2019, 11, 25), new Date(2019, 11, 26), new Date(2019, 11, 31), new Date(2020, 0, 1)];
function checkHolidays(holidays, date) {
return holidays.some(function (holiday_date) {
return date.setHours(0, 0, 0, 0) === holiday_date.setHours(0, 0, 0, 0);
})
}
function nextWorkingDay(date) {
do {
date.setDate(date.getDate() + 1);
} while (checkHolidays(holidays, date) || !(date.getDay() % 6));
return date;
}
虽然这可行,但我确信它可以被简化并完全放弃单独的 checkHolidays 函数。我一直在努力实现.includes(),因为假期数组与传递给函数的new Date() 的时间不同。
任何进一步改进的建议/建议将不胜感激。感谢您的宝贵时间。
【问题讨论】:
-
一个功能性的CodePen is available here 演示我目前的进度,将结果直接记录到控制台。
标签: javascript arrays function loops