需求 1、给一个开始时间和结束时间; 2、计算在时间段内工作时间长度; 3、工作时间是9点-18点; 4、工作时长是8小时; 5、不记录周六和周日时间; 插件 使用了moment.js 代码 1 function GetWorkHours(beginDateTim ...
需求
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 }
原标题:JS获取时间段内的工作时长
关键词:JS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。