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


