function calculateEndDate(startDate, daysToComplete, holidays = []) {
const holidaySets = new Set(
holidays.map((date) => new Date(date).toDateString())
);
let current = new Date(startDate);
let workdaysCompeleted = 0;
while (workdaysCompeleted < daysToComplete) {
const day = current.getDay();
const isWeekend = day === 0 || day === 6;
const isHoliday = holidaySets.has(current.toDateString());
if (!isWeekend && !isHoliday) {
workdaysCompeleted++;
}
if (workdaysCompeleted < daysToComplete) {
current.setDate(current.getDate() + 1);
}
}
return current;
}
const endDate = calculateEndDate(
"2026-07-01",
5,
["2026-07-03"]
);
console.log(endDate.toDateString());
function calculateCalendarDaysNeeded(startDate, daysToComplete, holidays = []) {
const holidaySets = new Set(
holidays.map(date => new Date(date).toDateString())
);
let current = new Date(startDate);
let workdaysCompeleted = 0;
let calendarDays = 0;
while(workdaysCompeleted < daysToComplete) {
const day = current.getDay();
const isWeekend = day === 0 || day === 6;
const isHoliday = holidaySets.has(current.toDateString());
if (!isWeekend && !isHoliday) {
workdaysCompeleted++;
}
calendarDays++;
if (workdaysCompeleted < daysToComplete) {
current.setDate(current.getDate() + 1);
}
}
return calendarDays;
}
console.log(
calculateCalendarDaysNeeded("2026-07-01", 5, ["2026-07-03"])
);