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
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章