根據起始日期與工期計算結束日期
//根據起始日期於及工作日獲取結束日期,週末不算工作日
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
}