JS获取时间段内的工作时长
2016-04-19 17:08
525 查看
需求
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数据类型中的数字与字符串的转换
- 深夜课堂:javascript 引用类型(1)
- javascript去除字符串左右两端的空格
- 如何判断js中的数据类型
- jsoup 选择器(一)常规选择器
- 69、js获取标签值getElementsByName
- Javascript读书笔记:函数定义和函数调用
- js限制上传文件大小
- js定义类的方法
- JSPatch 使用
- phantomjs 解码url
- JSP入门学习总结(一)JSP常用的标签
- JavaScript之数据类型
- javascript实现简单计算器效果【推荐】
- js 中用 location.pathname 获取项目名
- SuperMap iClient for JavaScript 实现拖动半径进行距离查询
- C#json 解析
- 高效率去掉js数组中重复项
- 关于JavaScript变量提升的理解
- javascript基础二 (DOM,BOM基础二)