计算JavaScript中不包括周末和假日的天数

时间:2018-04-21 17:18:52

标签: javascript date

我正在尝试编写一个代码,其中将计算总天数,不包括周末和自定义假日。我搜索了stackoverflow和adobe论坛以找到解决方案并附带下面的代码。 如果公众假期在一个工作日(周六至周三),则不计算。 我的问题是,如果公共假期在周末(周四至周五)下降,则扣除两个(假日和周末)。假设休假时间为18/09 / 2018-22 / 09/2018,总计数2天显示代替3.再次为17/10 / 2018-21 / 10/2018,总计1天显示代替3天。 任何帮助或任何解决问题的想法都会很棒! 此致

try:
    gettimer = bs4.find("div", {'class': "clock"}).attrs['data-code']
    // rest of code
except:
    pass

2 个答案:

答案 0 :(得分:1)

你应该使用一个库而不是重新发明轮子。

但如果您想自己动手,可以使用.getDay检查公众假期是否在周末。

var weekend = [4, 5],   // for Thursday, Friday
    holDate, holDay;
for (var i = 0; i < hdayar.length; i++){
    holDate = Date.parse(hdayar[i]);
    holDay = new Date(holDate).getDay()
    if (weekend.indexOf(holDay) == -1 && holDate >= Date.parse(start) && holDate <= Date.parse(end)) {
        phdays ++;
    }
}

phdays现在将包含该范围内的非周末公众假期。

答案 1 :(得分:1)

有同样的要求,这就是我的解决方法。希望对其他人有帮助

var holiday = ["4/18/2019", "4/19/2019", "4/20/2019", "4/25/2019", "4/26/2019"];
var startDate = new Date();
var endDate = new Date(startDate.setDate(startDate.getDate() + 1));

for (i = 0; i < holiday.length; i++) {
    var date = endDate.getDate();
    var month = endDate.getMonth() + 1; //Months are zero based
    var year = endDate.getFullYear();
    if ((month + '/' + date + '/' + year) === (holiday[i])) {
        endDate = new Date(endDate.setDate(endDate.getDate() + 1));
        if (endDate.getDay() == 6) {
            endDate = new Date(endDate.setDate(endDate.getDate() + 2));
        } else if (endDate.getDay() == 0) {
            endDate = new Date(endDate.setDate(endDate.getDate() + 1));
        }
    }
}

在这里,结束日期为您提供下一个工作日。在这里,我忽略了当前日期,并从第二天开始进行比较,无论是假日还是周末。您都可以根据自己的需求(month + '/' + date + '/' + year)自定义dateTime。比较两个日期。因为它看起来一样,但实际上却不一样。因此请进行相应的自定义。