JS获取时间段内的工作时长

需求 

1、给一个开始时间和结束时间;

2、计算在时间段内工作时间长度;

3、工作时间是9点-18点;

4、工作时长是8小时;

5、不记录周六和周日时间;

插件

使用了moment.js

代码

 1 function GetWorkHours(beginDateTime, endDateTime) {
 2     var _totalHour = 0;
 3     //1、获取开始时间和结束时间之间的日
 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.1、判断是否周日,周六
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
posted @ 2016-04-19 17:08  qiumc  阅读(3173)  评论(0编辑  收藏  举报