JS获取两个日期工作日相差的小时数(不包含周末)----可以指定一天的上班时间
2018-03-07 10:36
901 查看
//获取两个日期相差的工作小时(不包括节假日) function getHour(StartTime, EndTime) { StartTime = new Date(StartTime.replace(/-/g, '/')); EndTime = new Date(EndTime.replace(/-/g, '/')); var ms = Math.abs(EndTime.getTime() - StartTime.getTime()); //实际工时(天) = 起止日期差 - 周六日数目。 if ((StartTime.getMonth() == EndTime.getMonth()) && (StartTime.getDate() == EndTime.getDate())) { //若为同一日期 var hour1 = (getDayHour(StartTime.getHours(), StartTime.getMinutes(), EndTime.getHours(), EndTime.getMinutes(), "1")).toFixed(1); return hour1; } else { //若不为同一日期 var days = Math.floor(ms / 1000 / 60 / 60 / 24) + 1; var workDayVal = 0; //工时的余数 var remainder = days % 7; //工时向下取整的除数 var divisor = Math.floor(days / 7); var weekendDay = 2 * divisor; //起始日期的星期,星期取值有(1,2,3,4,5,6,0) var nextDay = StartTime.getDay(); //从起始日期的星期开始 遍历remainder天 for (var tempDay = remainder; tempDay >= 1; tempDay--) { //第一天不用加1 if (tempDay == remainder) { nextDay = nextDay + 0; } else if (tempDay != remainder) { nextDay = nextDay + 1; } //周日,变更为0 if (nextDay == 7) { nextDay = 0; } //周六日 if (nextDay == 0 || nextDay == 6) { weekendDay = weekendDay + 1; } } workDayVal = days - weekendDay - 2; var hour0 = (workDayVal * 8 + getDayHour(StartTime.getHours(), StartTime.getMinutes(), EndTime.getHours(), EndTime.getMinutes(), "0")).toFixed(1); return hour0; } } //计算开始日期与结束日期两天的请假小时数或者同一天的小时数 //上班时间:早上08:30-12:30 下午:14:00-18:00 function getDayHour(sh, sm, eh, em, type) { sh = parseInt(sh); eh = parseInt(eh); if (type == "0") { //计算非当天 if (8 <= sh&&sh <= 12) { sh = 12 - sh + 4 + ((60 - sm) / 60); } else if (14 <= sh <= 18) { sh = 18 - sh + ((60 - sm) / 60); } if (8 <= eh &&eh<= 12) { eh = eh - 8 + (em / 60); } else if (14 <= eh <= 18) { sh = eh - 14 + 4 + (em / 60); } return parseFloat(sh + eh-1); } else { //计算当天 if (sh 4000 == eh) { //在同一小时 if (sm == em) { return 0; } else { return Math.abs((sm - em) / 60); } } else { //不在同一小时 //开始时间在上午时间段,并且结束时间在下午时间段 if ((8 <= sh&& sh<= 12) && (14 <= eh && eh<= 18)) { if ( sm == 30) return parseFloat(12 - sh + eh - 14 + (em / 60)); else if (sm < 30) { return parseFloat(12 - sh + eh - 14 + ((30 - sm) / 60) + (em / 60)); } else if (sm > 30 && sh != 12) { return parseFloat(12-sh-1+eh - 14 + ((60 - sm) / 60) + 0.5 + (em / 60)); } } //开始时间与结束时间都在上午时间段 if ((8 <= sh&&sh <= 12) && (8 <= eh&&eh <= 12)) { if (sm == em) { return parseFloat(Math.abs(eh - sh)); } else { return parseFloat(Math.abs(eh - sh - 1) + (60 - sm) / 60 + em / 60); } } else if (14 <= sh&&sh <= 18 && 14 <= eh&&eh <= 18) { if (sm == em) { return parseFloat(Math.abs(eh - sh)); } else { return parseFloat(Math.abs(eh - sh - 1) + (60 - sm) / 60 + em / 60); } } } }
相关文章推荐
- JS和java 获取系统时间的前一天? 两个日期之间相差多少天?
- JS 获取两个时间相差多少个小时
- js得到连两个时间段之间所有的年-月 获取当前日期 格式化日期 根据指定日期得到该日期该月份的最后一天
- JS获取两个字符串日期的时间差
- js中获取两个日期之间相差的天数
- SQL Server 获取最后一天(指定时间的月最后一天日期)
- js获取一天的开始时间和结束时间和日期与字符串、数值之间的转换
- 根据指定两个日期计算出这些时间内有多少天是周末 php程序函数代码
- php 获取指定两个时间之间相差的月份
- 【转】js获取当前指定的前几天的日期(如当前时间的前七天的日期)
- JS计算两个日期时间差,天 小时 分 秒格式
- Java计算两个日期时间相差几天,几小时,几分钟等
- Oracle获取两个日期相差的小时
- C#获取两个时间的时间差并去除周末(取工作日)的方法
- Oracle计算指定日期内的工作日(不包含周末)
- jq获取两个日期相差天数、小时、分秒
- C#有关时间处理的一些方法,两个日期间相差的天、小时、分钟、月数等
- js根据当前时间获取指定范围内的时间段日期
- Java计算两个日期时间相差几天,几小时,几分钟等
- java中使用Calendar获取指定日期前n个小时的时间日期