最近在一个项目中,需要计算两个时间段之前间隔的时间秒数,这里把代码记录下来。代码很简单,主要是需要逻辑清楚,因为有几种情况需要区分,放在这里分享下。
1 function weekend(time1,time2){ 2 //计算时间间隔,除去周末和非工作时间 3 if(time1!=null&&time2!=null){ 4 debugger; 5 var timesstart1=Date.parse(time1); 6 var dat1=new Date(timesstart1); 7 var dat1str=dat1.getFullYear()+"-"+(dat1.getMonth()+1)+"-"+dat1.getDate()+" "+dat1.getHours()+":"+dat1.getMinutes()+":"+dat1.getSeconds(); 8 var day1=dat1.getFullYear()+"-"+(dat1.getMonth()+1)+"-"+dat1.getDate()+" 17:30:00";//下发时间的当天17:30 9 if(Date.parse(dat1str)>Date.parse(day1)){ 10 var entDays=54000000;//17:30到8:30的时间戳 11 timesstart1=Date.parse(day1)+entDays;//如果下发时间大于下班时间,下发时间改成第二天的8:30 12 } 13 var timeend2=Date.parse(time2)+1000; 14 var dat2=new Date(timeend2); 15 var day2=dat2.getFullYear()+"-"+(dat2.getMonth()+1)+"-"+dat2.getDate()+" 08:30:00";//接受任务的当天8:30 16 var formatday1=Date.parse(day1); 17 var formatday2=Date.parse(day2); 18 if(day1.substring(0,10)==day2.substring(0,10)){ 19 return ((timeend2-timesstart1)/1000);//下发时间和接受时间是同一天 20 }else{ 21 var todaySS=formatday1-timesstart1;//下发时间到17:30的秒数 22 var tomorrowSS=timeend2-formatday2;//接受时间到08:30的秒数 23 var dayS=86400000; 24 var dayWork=32400000;//一天的秒数 25 var intervalS=(timeend2-timesstart1)/dayS; 26 var cnt=intervalS/7;//几个整周 27 var mdays=intervalS-7*cnt;//余下的天数 28 cnt=cnt*2;//一周有两天,n周就有n*2天 29 var n=new Date(time1).getDay();//那一天是周几 30 if(n+mdays>7){ 31 cnt=cnt+2; 32 }if(n+mdays==7){ 33 cnt++; 34 } 35 var dayN=Math.floor(intervalS-cnt);//几个整天 36 return ((todaySS+dayN*dayWork+tomorrowSS)/1000); 37 } 38 }else return 0 ; 39 }