计算请假天数的代码,去掉了假期和下班时间,中间的那个去掉假期的方法可以自己设置,参数arg可以取出请假时间的对象,domain表示this,实际操作可以自己微调,看一下思路就可以。

LBCP.ZHXZ.Leave.jisuantime = function(arg, domain){
    var canshu;
    var AM_UpHour;
    var AM_DownHour;
    var PM_UpHour;
    var PM_DownHour;
    var hour = 60 * 60 * 1000;
    var am1;
    var am2;
    var pm1;
    var pm2;
    if(domain.workflow.getModuleParam()){
        canshu = JSON.parse(domain.workflow.getModuleParam());
        if(canshu.sbsj && canshu.sbsj.am1){
            am1 = canshu.sbsj.am1;
            AM_UpHour = am1 * hour;
        }
        if(canshu.sbsj && canshu.sbsj.am2){
            am2 = canshu.sbsj.am2;
            AM_DownHour = am2 * hour;
        }
        if(canshu.sbsj && canshu.sbsj.pm1){
            pm1 = canshu.sbsj.pm1;
            PM_UpHour = pm1 * hour;
        }
        if(canshu.sbsj && canshu.sbsj.pm2){
            pm2 = canshu.sbsj.pm2;
            PM_DownHour = pm2 * hour;
        }
    } else{
        am1 = 9;
        am2 = 12;
        pm1 = 14;
        pm2 = 18;
        AM_UpHour = 9 * hour;
        AM_DownHour = 12 * hour;
        PM_UpHour = 14 * hour;
        PM_DownHour = 18 * hour;
    }
        var days = 0.0;
        var bTimeStr = arg.begintime1 + arg.begintime2;
        var eTimeStr = arg.endtime1 + arg.endtime2;
        var bDate = new Date(arg.time1);
        var eDate = new Date(arg.time2);
        var bTime = bTimeStr[0] * 10 * hour + bTimeStr[1] * hour
                + bTimeStr[2] * 60 * 10 * 1000 + bTimeStr[3] * 60 * 1000;
        var eTime = eTimeStr[0] * 10 * hour + eTimeStr[1] * hour
                + eTimeStr[2] * 60 * 10 * 1000 + eTimeStr[3] * 60 * 1000;
        var half = 0.5;
        var allDay = 1.0;
        var workh = parseFloat(pm2) - parseFloat(pm1) + parseFloat(am2) - parseFloat(am1);
        // 相隔天数
        var n = (eDate.getTime() - bDate.getTime()) / (hour * 24);
        if (n > 1) {
            days = n - 1;
        }
        // 如果是同一天
        if (arg.time1 == arg.time2) {
            if (bTime <= eTime) {
                if (bTime <= AM_UpHour) {
                    if (eTime <= AM_DownHour && eTime > AM_UpHour) {
                        days += (eTime - AM_UpHour)
                                / (60 * 60 * 1000 * workh);
                    }
                    if (eTime > AM_DownHour && eTime <= PM_UpHour) {
                        days += (AM_DownHour - AM_UpHour)
                                / (60 * 60 * 1000 * workh);
                    }
                    if (eTime > PM_UpHour && eTime <= PM_DownHour) {
                        days += (AM_DownHour - AM_UpHour + eTime - PM_UpHour)
                                / (60 * 60 * 1000 * workh);
                    }
                    if (eTime > PM_DownHour) {
                        days += 1.0;
                    }
                } else if (bTime > AM_UpHour && bTime <= AM_DownHour) {// 大于上午上班时间,小于上午下班时间
                    if (eTime <= AM_DownHour) {
                        days += (eTime - bTime) / (60 * 60 * 1000 * workh);
                    }
                    if (eTime > AM_DownHour && eTime <= PM_UpHour) {
                        days += (AM_DownHour - bTime)
                                / (60 * 60 * 1000 * workh);
                    }
                    if (eTime > PM_UpHour && eTime <= PM_DownHour) {
                        days += (AM_DownHour - bTime + eTime - PM_UpHour)
                                / (60 * 60 * 1000 * workh);
                    }
                    if (eTime > PM_DownHour) {
                        days += (AM_DownHour - bTime + PM_DownHour - PM_UpHour)
                                / (60 * 60 * 1000 * workh);
                    }
                } else if (bTime > AM_DownHour && bTime <= PM_UpHour) {// 大于上午下班时间,小于下午上班班时间
                    if (eTime <= PM_DownHour) {
                        days += (eTime - PM_UpHour)
                                / (60 * 60 * 1000 * workh);
                    }
                    if (eTime > PM_DownHour) {
                        days += (AM_DownHour - PM_UpHour)
                                / (60 * 60 * 1000 * workh);
                    }
                } else if (bTime > PM_UpHour && bTime <= PM_DownHour) {// 大于上午下班时间,小于下午上班班时间
                    if (eTime <= PM_DownHour) {
                        days += (eTime - bTime) / (60 * 60 * 1000 * workh);
                    }
                    if (eTime > PM_DownHour) {
                        days += (AM_DownHour - bTime)
                                / (60 * 60 * 1000 * workh);
                    }
                }
            }
        }
        // 不是同一天
        else {
            if (bTime <= AM_UpHour) {// 1
                if (eTime <= AM_UpHour) {
                    days += 1;
                }
                if (eTime > AM_UpHour && eTime <= AM_DownHour) {
                    days += (1 + (eTime - AM_UpHour)
                            / (60 * 60 * 1000 * workh));
                }
                if (eTime > AM_DownHour && eTime <= PM_UpHour) {
                    days += (1 + (AM_DownHour - AM_UpHour)
                            / (60 * 60 * 1000 * workh));
                }
                if (eTime > PM_UpHour && eTime <= PM_DownHour) {
                    days += (1 + (AM_DownHour - AM_UpHour + eTime - PM_UpHour)
                            / (60 * 60 * 1000 * workh));
                }
                if (eTime > PM_DownHour) {
                    days += 2;
                }
            } else if (bTime > AM_UpHour && bTime <= AM_DownHour) {
                if (eTime <= AM_UpHour) {
                    days += (AM_DownHour - bTime + PM_DownHour - PM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > AM_UpHour && eTime <= AM_DownHour) {
                    days += (AM_DownHour - bTime + PM_DownHour - PM_UpHour
                            + eTime - AM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > AM_DownHour && eTime <= PM_UpHour) {
                    days += (AM_DownHour - bTime + PM_DownHour - PM_UpHour
                            + AM_DownHour - AM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > PM_UpHour && eTime <= PM_DownHour) {
                    days += (AM_DownHour - bTime + PM_DownHour - PM_UpHour
                            + eTime - PM_UpHour + AM_DownHour - AM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > PM_DownHour) {
                    days += (1 + (AM_DownHour - bTime + PM_DownHour - PM_UpHour)
                            / (60 * 60 * 1000 * workh));
                }
            } else if (bTime > AM_DownHour && bTime <= PM_UpHour) {
                if (eTime <= AM_UpHour) {
                    days += (PM_DownHour - PM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > AM_UpHour && eTime <= AM_DownHour) {
                    days += (eTime - AM_UpHour + PM_DownHour - PM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > AM_DownHour && eTime <= PM_UpHour) {
                    days += (AM_DownHour - AM_UpHour + PM_DownHour - PM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > PM_UpHour && eTime <= PM_DownHour) {
                    days += (PM_DownHour - PM_UpHour + AM_DownHour
                            - AM_UpHour + eTime - PM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > PM_DownHour) {
                    days += (1 + (PM_DownHour - PM_UpHour)
                            / (60 * 60 * 1000 * workh));
                }
            } else if (bTime > PM_UpHour && bTime <= PM_DownHour) {
                if (eTime <= AM_UpHour) {
                    days += (PM_DownHour - bTime)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > AM_UpHour && eTime <= AM_DownHour) {
                    days += (eTime - AM_UpHour + PM_DownHour - bTime)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > AM_DownHour && eTime <= PM_UpHour) {
                    days += (AM_DownHour - AM_UpHour + PM_DownHour - bTime)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > PM_UpHour && eTime <= PM_DownHour) {
                    days += (PM_DownHour - bTime + AM_DownHour - AM_UpHour
                            + eTime - PM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > PM_DownHour) {
                    days += (1 + (PM_DownHour - bTime)
                            / (60 * 60 * 1000 * workh));
                }
            } else if (bTime > PM_DownHour) {// PM_DownHour - bTime
                if (eTime > AM_UpHour && eTime <= AM_DownHour) {
                    days += (eTime - AM_UpHour) / (60 * 60 * 1000 * workh);
                }
                if (eTime > AM_DownHour && eTime <= PM_UpHour) {
                    days += (AM_DownHour - AM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > PM_UpHour && eTime <= PM_DownHour) {
                    days += (AM_DownHour - AM_UpHour + eTime - PM_UpHour)
                            / (60 * 60 * 1000 * workh);
                }
                if (eTime > PM_DownHour) {
                    days += 1;
                }
            }
        }
        sttime1 = new Date(arg.time1.replace(/-/g, '/'));
        sttime2 = new Date(arg.time2.replace(/-/g, '/'));
        var aaa = (sttime2 - sttime1)/(60 * 60 * 1000 * 24);
        var ab = arg.time1.split("-");
        var ae = arg.time2.split("-");
        var db = new Date();
        db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]);
        var de = new Date();
        de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]);
        var unixDb = db.getTime();
        var unixDe = de.getTime();
        var i = 0;
        var jianum = 0.0;
        for (var k = unixDb; k <= unixDe;) {
            var date = new Date(parseInt(k));
            var year = date.getFullYear(); 
              var month =(date.getMonth() + 1).toString(); 
              var day = (date.getDate()).toString();  
              if (month.length == 1) { 
                  month = "0" + month; 
              } 
              if (day.length == 1) { 
                  day = "0" + day; 
              }
            var dateTime = year + "-" + month + "-" + day;
            var result = LEAP.request('loap_isworkday', {datestr:dateTime});
            if(result && result.result && result.result[0] == 1){
                if(i == 0){
                    if(bTime <= AM_UpHour){
                        jianum += 1;
                    } else if(bTime > AM_UpHour && bTime <= AM_DownHour){
                        jianum += (PM_DownHour - PM_UpHour + AM_DownHour - bTime)/(60 * 60 * 1000 * workh);
                    } else if(bTime > AM_DownHour && bTime <= PM_UpHour){
                        jianum += (PM_DownHour - PM_UpHour)/(60 * 60 * 1000 * workh);
                    } else if(bTime > PM_UpHour && bTime <= PM_DownHour){
                        jianum += (PM_DownHour - bTime)/(60 * 60 * 1000 * workh);
                    } else if(bTime > PM_DownHour){
                        jianum += 0;
                    }
                } else if(i == aaa){
                    if(eTime <= AM_UpHour){
                        jianum += 0;
                    } else if(eTime > AM_UpHour && eTime <= AM_DownHour){
                        jianum += (eTime - AM_UpHour)/(60 * 60 * 1000 * workh);
                    } else if(eTime > AM_DownHour && eTime <= PM_UpHour){
                        jianum += (AM_DownHour - AM_UpHour)/(60 * 60 * 1000 * workh);
                    } else if(eTime > PM_UpHour && eTime <= PM_DownHour){
                        jianum += (AM_DownHour - AM_UpHour + eTime - PM_UpHour)/(60 * 60 * 1000 * workh);
                    } else if(eTime > PM_DownHour){
                        jianum += 1;
                    }
                } else{
                    jianum += 1;
                }
            }
            if(!result || !result.result){
                var dt = new Date(dateTime.replace(/-/g, '/'));
                if (dt.getDay() == 0 || dt.getDay() == 6){
                //0--sunday, 6--saturday
                    jianum += 1;
                }
            }
            i++;
            k = k + 24 * 60 * 60 * 1000;
        }
        days = days - jianum;
        return days;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值