jquery 开始日期,结束日期与工期之间的计算,周末两天不算工作日,不包含节假日

根据起始日期与工期计算结束日期

//根据起始日期于及工作日获取结束日期,周末不算工作日
function get_end_date(start_date,period) {
    var real_day=period     //实际天数

    var mod=Math.floor(period/5)    //取模
    var remainder=period%5              //取余

    //若日期大于5天,则加一个双休日,即2天,大于10天,则加2个双休日,即4天,依此类推
    if(remainder>0){
        real_day+=mod*2
    }else if(remainder==0){
        if((mod-1)>=1){
            real_day+=(mod-1)*2
        }
    }
    //若开始日期是星期二,工期的余数等于0天,则需要加2天,若开始日期是星期三,工期的余数大于3天,则结束日期需要加2天,依此类推
    var d=new Date(start_date)
    var week_num=d.getDay()
    switch (week_num) {
        case 0:
            if(remainder==1 && mod>0) real_day-=2
            break
        case 1:
            break
        case 2:
            if(remainder==0) real_day+=2
            break
        case 3:
            if(remainder>3 || remainder==0) real_day+=2
            break
        case 4:
            if(remainder>2 || remainder==0) real_day+=2
            break
        case 5:
            if(remainder>1 || remainder==0) real_day+=2
            break
        case 6:
            if(remainder==0 || remainder>1){
                real_day += 1
            }else if(remainder==1 && mod>=1){
                real_day-=1
            }
            break
    }
	var newTime = Date.parse(start_date)  //将日期时间转换为毫秒值
	var newTimes = newTime + 3600000*24*(real_day-1); //(day-1)天后的毫秒值,3600000 为1小时的毫秒值
	var newDate =new Date(newTimes).format("yyyy-MM-dd");//将获取的毫秒值转换为对应的日期时间
	return newDate;
}

根据结束日期与工期计算开始日期

//根据结束日期于及工作日获取开始日期,周末不算工作日
function get_start_date(end_date,period) {
    var real_day=period     //实际天数

    var mod=Math.floor(period/5)    //取模
    var remainder=period%5              //取余

    //若日期大于5天,则加一个双休日,即2天,大于10天,则加2个双休日,即4天,依此类推
    if(remainder>0){
        real_day+=mod*2
    }else if(remainder==0){
        if((mod-1)>=1){
            real_day+=(mod-1)*2
        }
    }
    //若开始日期是星期二,工期的余数等于0天,则需要加2天,若开始日期是星期三,工期的余数大于3天,则结束日期需要加2天,依此类推
    var d=new Date(end_date)
    var week_num=d.getDay()
    switch (week_num) {
        case 0:
            if(remainder==0 || remainder>1){
                real_day += 1
            }else if(remainder==1 && mod>=1){
                real_day-=1
            }
            break
        case 1:
            if(remainder>1 || remainder==0) real_day+=2
            break
        case 2:
            if(remainder>2 || remainder==0) real_day+=2
            break
        case 3:
            if(remainder>3 || remainder==0) real_day+=2
            break
        case 4:
            if(remainder==0) real_day+=2
            break
        case 5:
            break
        case 6:
            if(mod>=1 && remainder==1) real_day-=2
            break
    }
    var newTime = Date.parse(end_date)  //将日期时间转换为毫秒值
	var newTimes = newTime - 3600000*24*(real_day-1); //(day-1)天后的毫秒值,3600000 为1小时的毫秒值
	var newDate =new Date(newTimes).format("yyyy-MM-dd");//将获取的毫秒值转换为对应的日期时间
	return newDate;
}

根据开始日期与结束日期计算工期

//根据结束日期与开始日期计算工期
//例s:'1991-01-08'
//例e:'1991-01-02'
function compute_period(s,e) {
    if(e<s) return
    if(e==s) return 1
    var endDate=new Date(e)
    var beginDate=new Date(s)

    var real_day=0
    if(endDate.getDay()==0 || endDate.getDay()==6) real_day++   //结束日期为周六日,则加一天
    if(beginDate.getDay()==0 || beginDate.getDay()==6) real_day++   //开始日期为周六日,则加一天
    while(endDate>=beginDate){
        try{
            if(endDate!=beginDate && endDate.getDay()!=0 && endDate.getDay()!=6){
            real_day++
        }
        }catch (e) {
            console.log(e);
        }
        endDate=new Date(endDate-3600000*24)
    }

    return real_day
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y_w_x_k

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值