Я знаю, что задавались похожие вопросы, но, похоже, я не могу найти ответ ни на один из них. Поэтому мне нужно сделать счетчик будних дней, используя только JavaScript. Цель состоит в том, чтобы подсчитать рабочие дни между двумя датами.
У меня он в основном работает, за исключением того, что когда начальная дата приходится на субботу или воскресенье, следующий понедельник не учитывается, и результат сокращается на один день . Я знаю, что это происходит, потому что счетчик переменных инициализируется как 0 и не увеличивается с итерацией, но я не знаю, что делать, чтобы это исправить. Однако после этого все остальное работает полностью нормально.
Я пробовал несколько вещей, но не могу понять, что делать. Мы будем благодарны за любые советы. Я вставляю приведенный ниже код, чтобы все могли его просмотреть.
let eta='2020-07-23';
let req='2020-07-31T10:33:21.000Z';
let results;
//uncomment to check if the output is correct
window.alert(weekdayCount(eta,req));
function weekdayCount(d1,d2)
{
var tempEndDate = new Date(d2);
tempEndDate.setHours(0,0,0,1); //set the end dates time to midnight.
var startDate = Date.parse(d1);
var endDate = Date.parse(tempEndDate);
//ensure that d1 is always 'smaller' than d2
if(startDate<endDate)
{
//count is the number of working days
var count = 0;
var curDate = new Date(d1);
var tempDay = curDate.getDay();
var newStartDate = Date.parse(curDate);
//uncomment to view outputs
//window.alert(curDate);
//window.alert(tempDay);
//window.alert(newStartDate);
//window.alert(endDate);
//run the loop while start date is less than or equal to end date
while (newStartDate <= endDate)
{
//when dayofWeek is not 6 or 0 i.e. Saturday and Sunday, increment count
if(!((tempDay === 6) || (tempDay === 0)))
{
count++;
}
//update the date by adding a new day to input date each iteration
curDate.setDate(curDate.getDate() + 1);
tempDay = curDate.getDay();
newStartDate = Date.parse(curDate);
//uncomment to view outputs.
//window.alert(curDate);
//window.alert(tempDay);
//window.alert(newStartDate);
//window.alert(endDate);
//window.alert(count);
}
results = count;
}
else
{
//alert if d1 is greater than d2
results = window.alert("ETA must be smaller than REQ.");
}
//return no. of working days
return results;
}