“计算天数”函数返回错误的计数

the calculate days function is returning wrong count

提问人:Smith Jonas 提问时间:11/10/2023 最后编辑:Smith Jonas 更新时间:11/11/2023 访问量:45

问:

我有一个 javascript 函数,当我选择 11 月 20 日至 11 月 22 日等日期时,我得到的计数是 2 而不是 3,我在这里做错了什么,我尝试调试代码但无法弄清楚出了什么问题

是因为时区的原因吗

在此处输入图像描述

这是我的JS代码

function dConvert(d, seprater = '/') {
    let aFormate = dateFormat.split(seprater);
    let aD = d.split(seprater);
    let oD = aFormate.reduce((acc, val, ind) => {
        acc[val] = aD[ind];
        return acc;
    }, {});
    return oD['yy'] + '-' + oD['mm'] + '-' + oD['dd'];
}

Date.prototype.addDay = function(days) {
    var date = new Date(this.valueOf())
    date.setDate(date.getDate() + days);
    return date;
}


function calcBusinessDays(startDate, endDate) {
    var count = 0;
    var curDate = startDate;
    if (startDate == endDate) return 1;
    let aTemp1 = startDate.split('/');
    let aTemp2 = endDate.split('/');
    let dDate1 = new Date(dConvert(startDate));
    let dDate2 = new Date(dConvert(endDate));
    let aWD = $('[name="WorkingDays"]').val().split(',');
    while (dDate1 <= dDate2) {
        var dayOfWeek = (dDate1.getDay() + 1).toString();
        var isWworkingDay = aWD.includes(dayOfWeek);
        let oD = {
            'm': dDate1.getMonth() + 1,
            'd': dDate1.getDate(),
            'y': dDate1.getFullYear(),
        };
        let tempDate = (oD.m < 9 ? "0" + oD.m : oD.m) + '/' + (oD.d < 9 ? "0" + oD.d : oD.d) + '/' + oD.y;
        if (isWworkingDay && (aHolidayDate.indexOf(tempDate) == -1))
            count++;
        dDate1 = dDate1.addDay(1);
    }
    return count;
}

请问这里有什么问题

谢谢

javascript jquery jquery-ui

评论


答:

1赞 Derek Glassick 11/11/2023 #1

您似乎希望在日期范围的计算中包括第一个日期。如果你想这样做,你应该有而不是.如果你不这样做,你的 while 循环将短一个。count = 1count = 0