输入【开始时间】和【结束时间】,计算工作天数,需考虑节假日周末和调休

参考大神  http://www.cnblogs.com/w3live/archive/2012/02/10/2345461.html  略有修改

目前还存在问题:IE8有错误  火狐 chrome 360均可以实现 <%@ page language="Java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>开始时间结束时间</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script> <script language="javascript" type="text/javascript" src="${pageContext.request.contextPath}/My97DatePicker/WdatePicker.js"></script> <script type="text/javascript"> function endTime(){ var beginTime = document.getElementById("beginTime").value; var endTime = document.getElementById("endTime").value; alert(getWorkDayCount("cn",beginTime,endTime)); } //法定节假日和调休日的设定 var Holiday = ["2017-10-01", "2017-10-02", "2017-10-03","2017-10-04","2017-10-05", "2017-10-06", "2017-10-07", "2017-10-08"]; //虽然是周末但是还是要上班的 var WeekendsOff = ["2017-09-30"]; function nearlyWeeks (mode, weekcount, end) { /* 功能:计算当前时间(或指定时间),向前推算周数(weekcount),得到结果周的第一天的时期值; 参数: mode -推算模式('cn'表示国人习惯【周一至周日】;'en'表示国际习惯【周日至周一】) weekcount -表示周数(0-表示本周, 1-前一周,2-前两周,以此推算); end -指定时间的字符串(未指定则取当前时间); */ if (mode == undefined) mode = "cn"; if (weekcount == undefined) weekcount = 0; if (end != undefined) end = new Date(new Date(end).toDateString()); else end = new Date(new Date().toDateString()); var days = 0; if (mode == "cn") days = (end.getDay() == 0 ? 7 : end.getDay()) - 1; else days = end.getDay(); return new Date(end.getTime() - (days + weekcount * 7) * 24 * 60 * 60 * 1000); }; function getWorkDayCount (mode, beginDay, endDay) { /* 功能:计算一段时间内工作的天数。不包括周末和法定节假日,法定调休日为工作日,周末为周六、周日两天; 参数: mode -推算模式('cn'表示国人习惯【周一至周日】;'en'表示国际习惯【周日至周一】) beginDay -时间段开始日期; endDay -时间段结束日期; */ var begin = new Date(Date.parse(beginDay.replace(/-/g, "/"))).getTime(); var end = new Date(Date.parse(endDay.replace(/-/g, "/"))).getTime(); //每天的毫秒总数,用于以下换算 var daytime = 24 * 60 * 60 * 1000; //两个时间段相隔的总天数 var days = (end - begin) / daytime + 1; //时间段起始时间所在周的第一天 var beginWeekFirstDay = nearlyWeeks(mode, 0, begin).getTime(); //时间段结束时间所在周的最后天 var endWeekOverDay = nearlyWeeks(mode, 0, end).getTime() + 6 * daytime; //由beginWeekFirstDay和endWeekOverDay换算出,周末的天数 var weekEndCount = ((endWeekOverDay - beginWeekFirstDay) / daytime + 1) / 7 * 2; //根据参数mode,调整周末天数的值 if (mode == "cn") { if (new Date(endDay).getDay() > 0 && new Date(endDay).getDay() < 6) weekEndCount -= 2; else if (new Date(endDay).getDay() == 6) weekEndCount -= 1; if (new Date(beginDay).getDay() == 0) weekEndCount -= 1; } else { if (new Date(endDay).getDay() < 6) weekEndCount -= 1; if (new Date(beginDay).getDay() > 0) weekEndCount -= 1; } //根据调休设置,调整周末天数(排除调休日) $.each(WeekendsOff, function (i, offitem) { var itemDay = new Date(offitem.split('-')[0] + "/" + offitem.split('-')[1] + "/" + offitem.split('-')[2]); //如果调休日在时间段区间内,且为周末时间(周六或周日),周末天数值-1 if (itemDay.getTime() >= begin && itemDay.getTime() <= end && (itemDay.getDay() == 0 || itemDay.getDay() == 6)) weekEndCount -= 1; }); //根据法定假日设置,计算时间段内周末的天数(包含法定假日) $.each(Holiday, function (i, itemHoliday) { var itemDay = new Date(itemHoliday.split('-')[0] + "/" + itemHoliday.split('-')[1] + "/" + itemHoliday.split('-')[2]); //如果法定假日在时间段区间内,且为工作日时间(周一至周五),周末天数值+1 if (itemDay.getTime() >= begin && itemDay.getTime() <= end && itemDay.getDay() > 0 && itemDay.getDay() < 6) weekEndCount += 1; }); //工作日 = 总天数 - 周末天数(包含法定假日并排除调休日) return days - weekEndCount; }; </script> </head> <body> <!-- 限制输入周六周末 且 只能输入今天及今天以后 --> <input id="beginTime" class="Wdate" type="text" onFocus="WdatePicker({disabledDays:[0,6],minDate:'%y-%M-{%d}'})" > <font color=red><- 点我弹出日期控件</font> <br> <br> <input type='text' id="endTime" class="Wdate" type="text" onFocus="WdatePicker({disabledDays:[0,6],minDate:'%y-%M-{%d}'})" οnblur="endTime()"/> </body> </html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值