1. 程式人生 > >SQL計算時間差並排除周末

SQL計算時間差並排除周末

gin add tel 設定 asc ear edi == don

SQL計算時間差並排除周末


CREATE
FUNCTION DI_FN_GET_WorkDay (@begin DATETIME , @end DATETIME ) RETURNS int BEGIN DECLARE @i INT , @j INT SET @i = 0 SET @j = 0 IF @end > @begin BEGIN WHILE DATEDIFF(d, DATEADD(d, @i, @begin), @end) <> 0 BEGIN IF DATEPART(weekday, DATEADD(d, @i, @begin)) NOT
IN ( 1, 7 ) SET @j = @j + 1 SET @i = @i + 1 END END SELECT @j = ( @j + 1 ) * 24 * 60 - DATEDIFF(Minute, CAST(CONVERT(VARCHAR(10), @begin, 120) AS DATETIME), @begin) - DATEDIFF(Minute, @end, CAST(CONVERT(VARCHAR(10), @end + 1, 120) AS DATETIME)) RETURN @j END

輸入開始時間和工作天數,計算結束時間,需考慮節假日周末和調休

 1 <!-- 限制輸入周六周末【disabledDays:[0,6]】  且 只能輸入今天及今天以後【minDate:‘%y-%M-{%d}‘】 -->
 2  
 3 <input id="beginTime" class="Wdate" type="text" onFocus="WdatePicker({minDate:‘%y-%M-{%d}‘})" > 
 4 <br><br>
 5 <input type=‘text‘ id="d" onblur="endTime(this.value)"/>
 6 <br><br>
 7
8 <input type=‘text‘ id="endTime" type="text" readonly/> 9 10 11 <script type="text/javascript"> 12 function endTime(day){ 13 //開始時間 14 var beginTime = document.getElementById("beginTime").value; 15 16 document.getElementById("endTime").value = getWorkDayCount(beginTime,day); 17 18 } 19 20 //法定節假日和調休日的設定 21 var Holiday = ["2017-10-1", "2017-10-2", "2017-10-3","2017-10-4","2017-10-5", "2017-10-6", "2017-10-7", "2017-10-8"]; 22 23 //雖然是周末但是還是要上班的【調休】 24 var WeekendsOff = ["2017-9-30"]; 25 26 //“2017-10-09”+12 27 function addDate(dateTemp,days){ 28 29 var dateTemp = dateTemp.split("-"); 30 var nDate = new Date(dateTemp[1] + ‘-‘ + dateTemp[2] + ‘-‘ + dateTemp[0]); //轉換為MM-DD-YYYY格式 31 var millSeconds = Math.abs(nDate) + (days * 24 * 60 * 60 * 1000); 32 var rDate = new Date(millSeconds); 33 var year = rDate.getFullYear(); 34 var month = rDate.getMonth() + 1; 35 if (month.length==1) month = "0" + month; 36 var date = rDate.getDate(); 37 if (date.length==1) date = "0" + date; 38 return (year + "-" + month + "-" + date); 39 } 40 function getWorkDayCount (beginDate, workDay) { 41 /* 42 功能:計算一段時間內工作的天數。不包括周末和法定節假日,法定調休日為工作日,周末為周六、周日兩天; 43 參數: 44 beginDate -時間段開始日期; 45 workDay -工作時間; 46 */ 47 var begin = beginDate; 48 var count = 0; 49 50 51 for(var i = 0;i<365;i++){ 52 53 beginDate = addDate(begin,i); 54 var arys1= new Array(); 55 arys1=beginDate.split(‘-‘); //日期為輸入日期,格式為 2013-3-10 56 var ssdate=new Date(arys1[0],parseInt(arys1[1]-1),arys1[2]); 57 var day = ssdate.getDay(); 58 59 //1、判斷輸入的開始時間是不是周末 60 if(day==6 || day==0){ 61 //是周末 不是調休 是節假日 62 if(WeekendsOff.toString().indexOf(beginDate)==-1){ 63 continue; 64 }else{ 65 count++; 66 } 67 68 }else{ 69 if(Holiday.toString().indexOf(beginDate)!=-1){ 70 continue; 71 }else{ 72 count++; 73 } 74 75 } 76 77 78 if(count==workDay) break; 79 80 }; 81 82 //結束時間 83 84 return beginDate; 85 }; 86 87 </script> 88 89 90

SQL計算時間差並排除周末