你的位置:首页 > Java教程

[Java教程]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