Я бы хотел определить следующий рабочий / рабочий день и учесть праздники. В рабочие дни я исключаю воскресенья и субботы. Для праздников я исключаю массив объектов даты.
Я структурировал цикл 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()
.
Любые советы / предложения по дальнейшему улучшению были бы чрезвычайнооценили. Спасибо за ваше время.