js实现过滤两个日期之间的节假日和调休日

js实现过滤两个日期之间的节假日和调休日

实现思路:

1、节假日和调休日存物理表,然后通过后台获取,能访问外部api的也可以请求获取每年度的节假日数据
2、js接收返回的节假日数据进行过滤
var festival = [],weekendWorkDay = [];//存放后台获取的节假日和调休日
//后台获取节假日数组
if(beginDate != "" && endDate != ""){
    top.learun.httpPost(top.$.rootUrl + "/ar/bill/getFestivalDate",{},function(res){
        if(res.code == 200){
          var dateArr = JSON.parse(res.data);
          if(dateArr.length==0){
              top.learun.alert.error("请先录入本年度的节假日和调休日日期数据!");
              return false;
          }else{
            for(var i=0;i<dateArr.length;i++){
              festival[i] = dateArr[i].FESTIVAL_DATE;
              weekendWorkDay[i] = dateArr[i].WEEKEND_DATE;
            }
            return true;
          }
        }else{
            top.learun.alert.error("获取节假日天数时出错,请联系管理员!");
              return false;
        }
    });
}
var festival_list = [];
var 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())
})
var row = params.row;// 过滤俩天之间的周末节假日,返回距离的天数
function formatCountDay(row) {
    var startday = new Date(row.begin_date);
    var endday = new Date(row.end_date);
    // 总相差天数
    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);
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » js实现过滤两个日期之间的节假日和调休日