JS獲取時間段內的工做時長

需求 

一、給一個開始時間和結束時間;緩存

二、計算在時間段內工做時間長度;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 }
View Code
相關文章
相關標籤/搜索