JS计算俩个日期之间相差的天数,过滤节假日和周末

本来想着找下有没有节假日的插件,可是找不到。所以,我就手写节假日了。
如果对路过的你有帮助,请随手点个赞。
// 法定节假日
festival = ["2018-12-30","2018-12-31","2019-01-01","2019-02-03","2019-02-04","2019-02-05","2019-02-06","2019-02-07","2019-02-08", "2019-02-09",
    "2019-02-10", "2019-02-11","2019-04-05","2019-04-06","2019-04-07","2019-05-01","2019-05-02","2019-05-03","2019-05-04", "2019-06-07","2019-06-08",
    "2019-06-09","2019-09-13","2019-09-14","2019-09-15","2019-10-01","2019-10-02","2019-10-03","2019-10-04", "2019-10-05","2019-10-06","2019-10-07",
    "2020-01-01","2020-01-24","2020-01-25","2020-01-26","2020-01-27","2020-01-28","2020-01-29", "2020-01-30","2020-01-31","2020-02-01","2020-02-02",
    "2020-04-04","2020-04-05","2020-04-06","2020-05-01","2020-05-02","2020-05-03","2020-05-04", "2020-05-05","2020-06-25","2020-06-26","2020-06-27",
    "2020-10-01","2020-10-02","2020-10-03","2020-10-04","2020-10-05","2020-10-06", "2020-10-07","2020-10-08",
    "2021-01-01","2021-02-11","2021-02-12","2021-02-13","2021-02-14","2021-02-15","2021-02-16","2021-02-17","2021-02-26", "2021-04-02","2021-04-03",
    "2021-04-04","2021-04-30","2021-05-01","2021-05-02","2021-06-12","2021-06-13","2021-06-14", "2021-06-12","2021-09-19","2021-09-20","2021-09-21",
    "2021-10-01","2021-10-02","2021-10-03","2021-10-04","2021-10-05","2021-10-06","2021-10-07",
    "2022-01-01","2022-01-31","2022-02-01","2022-02-02","2022-02-03","2022-02-04","2022-02-05","2022-02-06","2022-04-03","2022-04-04","2022-04-05",
    "2022-04-30","2022-05-01","2022-05-02","2022-06-03","2022-06-04","2022-06-05","2022-09-09","2022-09-10","2022-09-11","2022-10-01","2022-10-02",
    "2022-10-03","2022-10-04","2022-10-05","2022-10-06", "2022-10-07"
    ];
//需要上班的周末
var weekendWorkDay = ["2018-12-29","2019-02-02","2019-09-29","2019-10-12","2019-04-28","2019-05-05",
                      "2020-01-19","2020-04-26","2020-05-09","2020-06-28","2020-09-27","2020-10-10",
                      "2021-02-07","2021-02-20","2021-09-18","2021-10-09","2021-10-10"];

实现
festival_list = []
weekendWorkDay_list = []
// 将节假日,周末工作日转换为时间戳
$.each(festival,function(i,item) {
    festival_list.push(new Date(item).valueOf())
})
$.each(weekendWorkDay,function(i,item) {
    weekendWorkDay_list.push(new Date(item).valueOf())
})

// 过滤俩天之间的周末节假日,返回距离的天数
function formatCountDay(row) {
    var startday = new Date(row.work_start_day)
    var endday = new Date(row.work_end_day)
    
    // 总相差天数
    var diffDay = (endday - startday) / (1000 * 60 * 60 * 24) + 1;
    if(parseInt(diffDay) === 0)
        return parseInt(diffDay);
        
    // 周末周六天数+节假日
    var weekEnds = 0;
    for(var i = 0; i < diffDay; i++)
    {
        sign = true
        // 判断是否是节假日
        for (k in festival_list){
            if(startday.valueOf() === festival_list[k]){
                weekEnds = weekEnds+1
                sign = false
            }

        }
        // 判断周六周日,如果是节假日则不作判断
        if (sign===true){
            if(startday.getDay() === 0 || startday.getDay() === 6){
                // 判断该周末是否需要因为节假日补班
                weekEnds_sign = 0
                for (j in weekendWorkDay_list){
                    if(startday.valueOf() === weekendWorkDay_list[j]){
                        weekEnds_sign = weekEnds_sign+1
                    }
                }
                if (weekEnds_sign === 0){
                    weekEnds = weekEnds+1
                }
            }
        }

        startday = startday.valueOf();
        startday += 1000 * 60 * 60 * 24;
        startday = new Date(startday);
    }
    return parseInt(diffDay - weekEnds);
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值