码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2016-04-19 19:18:34      阅读:545      评论:0      收藏:0      [点我收藏+]

标签:

需求 

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

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

标签:

原文地址:http://www.cnblogs.com/qiumc/p/5408939.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!