最近在一個項目中,需要計算兩個時間段之前間隔的時間秒數,這里把代碼記錄下來。代碼很簡單,主要是需要邏輯清楚,因為有幾種情況需要區分,放在這里分享下。
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 }