一、給一個開始時間和結束時間;緩存
二、計算在時間段內工做時間長度;ide
三、工做時間是9點-18點;spa
四、工做時長是8小時;插件
五、不記錄週六和週日時間;code
使用了moment.jsblog
1 function GetWorkHours(beginDateTime, endDateTime) { 2 var _totalHour = 0; 3 //一、獲取開始時間和結束時間之間的日 4 var _beginDate = moment(beginDateTime); 5 var _endDate = moment(endDateTime); 6 7 //整理時間 8 if (_beginDate.get("hour") < 9) { 9 //開始時間小於9點,設置爲9點 10 _beginDate.hour(9); 11 } else if (_beginDate.isBetween(moment(_beginDate).hour(12), moment(_beginDate).hour(13), 'hour', {})) { 12 //開始時間在12點-13點之間,設置爲13點 13 _beginDate.hour(13); 14 } else if (_beginDate.get("hour") >= 18) { 15 _beginDate.add(1, 'd').hour(9); 16 } 17 18 if (_endDate.get("hour") > 18) { 19 //結束時間大於18點,設置爲18點 20 _endDate.hour(18); 21 } else if (_endDate.isBetween(moment(_endDate).hour(12), moment(_endDate).hour(13), 'hour', {})) { 22 //結束時間在12點-13點之間,設置爲12點 23 _endDate.hour(12); 24 } else if (_endDate.get("hour") <= 9) { 25 _beginDate.add(-1, 'd').hour(18); 26 } 27 28 29 var _tempDateTime = _beginDate;//緩存一個日期,起始時開始時間 30 while (moment(_tempDateTime).isSameOrBefore(_endDate, "day")) { 31 32 //2.一、判斷是否週日,週六 33 var _week = moment(_tempDateTime).weekday(); 34 if (_week == 0 || _week == 6) { 35 //是週末,不算入時間 36 _tempDateTime.add(1, 'd'); 37 continue; 38 } 39 40 if (moment(_tempDateTime).isSame(_beginDate, "day")) { 41 if (moment(_tempDateTime).isSame(_endDate, "day")) { 42 //開始時間和結束時間是同一天,結束時間-開始時間 43 _totalHour += _endDate.diff(_beginDate, "hours", true); 44 //若是跨越中午12點30分,減去一個小時 45 if (moment(_tempDateTime).hour(12).minute(30).isBetween(_beginDate, _endDate, 'hour')) { 46 _totalHour -= 1; 47 } 48 _tempDateTime.add(1, 'd'); 49 continue; 50 } else { 51 //開始時間和結束時間不是同一天,18點-開始時間 52 _totalHour += moment(_beginDate).hour(18).diff(_beginDate, "hours", true); 53 //若是跨越中午12點30分,減去一個小時 54 if (moment(_tempDateTime).hour(12).minute(30).isBetween(_beginDate, moment(_beginDate).hour(18), 'hour')) { 55 _totalHour -= 1; 56 } 57 _tempDateTime.add(1, 'd'); 58 continue; 59 } 60 } 61 else if (moment(_tempDateTime).isSame(_endDate, "day")) { 62 //是否和結束時間是同一天,結束時間-開始時間9點, 63 _totalHour += _endDate.diff(moment(_endDate).hour(9), "hours", true); 64 //若是跨越中午12點30分,減去一個小時 65 if (moment(_tempDateTime).hour(12).minute(30).isBetween(moment(_endDate).hour(9), _endDate, 'hour')) { 66 _totalHour -= 1; 67 } 68 _tempDateTime.add(1, 'd'); 69 continue; 70 } 71 else { 72 _totalHour += 8; 73 _tempDateTime.add(1, 'd'); 74 continue; 75 } 76 77 } 78 return _totalHour < 0 ? 0 : _totalHour; 79 }