Просматривая фрагмент кода, кажется, что вы пытаетесь вручную прокрутить множество функций, которые уже существуют в рамках JS Date.
Как только вы получите дату начала и количество дней для доставки, вы можете добавить эти дни вместе, чтобы создать окончательную дату доставки. Оттуда и внутри oop вы можете go день за днем и проверять, является ли текущий индекс даты рабочим днем или нет (используя Date.getDay ()).
С этим вы можете проверить субботу [6] и воскресенье [0], а затем добавить дни, необходимые в дополнение к окончательной дате.
Я включил мою версию кода ниже в некоторая консольная отладка, но не добавлены праздники кода. Праздники могут быть проверены на использование массива или карты. Получите все даты выходных за год, а затем проследите, чтобы текущий индекс проверял массив / карту праздников, чтобы найти совпадения. Если есть, добавьте еще один день к окончательной дате.
Функция addDays взята из здесь . Это добавляет некоторое объяснение, которое, я думаю, вы найдете полезным.
function addDays(date, days) {
const copy = new Date(Number(date))
copy.setDate(date.getDate() + days)
return copy
}
// FINAL SHIPPING ESTIMATE
$('#calculateShippingEstimate').click(function( event ) {
event.preventDefault();
let mailingDateVal = $("#mailingDate").val();
let shippingDuration = data.shipTimes[$("#postageType").val()];
let mailingDate = new Date(mailingDateVal);
console.log("final Date: " + addDays(mailingDate, shippingDuration));
let finalDate = addDays(mailingDate, shippingDuration)
let mailingDateIndex = new Date(mailingDate);
while(mailingDateIndex <= finalDate) {
console.log("current mailDateIndex: " + mailingDateIndex)
if (mailingDateIndex === finalDate) {
break;
}
// Weekend
console.log(mailingDateIndex.getDay());
if (mailingDateIndex.getDay() == 0 || mailingDateIndex.getDay() == 6) {
console.log("weekend day hit! Adding day to final...")
finalDate = addDays(finalDate, 1);
}
mailingDateIndex = addDays(mailingDateIndex, 1);
}
});