Счетчик будних дней пропускает первый понедельник после наступления выходных - PullRequest
0 голосов
/ 03 августа 2020

Я знаю, что задавались похожие вопросы, но, похоже, я не могу найти ответ ни на один из них. Поэтому мне нужно сделать счетчик будних дней, используя только 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;
}
...