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);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM