![]()
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 }