根据起始日期与工期计算结束日期
//根据起始日期于及工作日获取结束日期,周末不算工作日
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
}