js 工作日 php-PHP计算一个时间段中的工作日天数

问题描述

PHP计算一个时间段中的工作日天数
目前我有一个js版本的,我想做成PHP版本的,希望大家能帮忙。
结果就是一个时间段中,计算工作日天数,排除法定节假日,周末,还要加上调休。
js的代码我先贴上来,请大家帮忙。
因菜鸟,目前没有C币,sorry!

 <script src=""/Public/Js/jquery.js"" type=""text/javascript""></script><script>var Holiday = [""2015-07-13""2015-07-14""2015-07-15""2012-01-22""2012-01-23""2012-01-24""2012-01-25""2012-01-26""2012-01-27""2012-01-28""2012-04-02""2012-04-03""2012-04-04""2012-04-29""2012-04-30""2012-05-01""2012-06-22""2012-06-23""2012-06-24""2012-09-30""2012-10-01""2012-10-02""2012-10-03""2012-10-04""2012-10-05""2012-10-06""2012-10-07""];  var WeekendsOff = [""2015-07-11""2012-01-21""2012-01-29""2012-03-31""2012-04-01""2012-04-28""2012-09-29""];  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(beginDay.toDateString());  var end = new Date(endDay.toDateString());  //每天的毫秒总数,用于以下换算  var daytime = 24 * 60 * 60 * 1000;  //两个时间段相隔的总天数  var days = (end - begin) / daytime + 1;  //时间段起始时间所在周的第一天  var beginWeekFirstDay = nearlyWeeks(mode 0 beginDay.getTime()).getTime();    //alert(beginWeekFirstDay);  //时间段结束时间所在周的最后天  var endWeekOverDay = nearlyWeeks(mode 0 endDay.getTime()).getTime() + 6 * daytime;  //由beginWeekFirstDay和endWeekOverDay换算出,周末的天数  var weekEndCount = ((endWeekOverDay - beginWeekFirstDay) / daytime + 1) / 7 * 2;  //根据参数mode,调整周末天数的值  if (mode == ""cn"") {  if (endDay.getDay() > 0 && endDay.getDay() < 6)  weekEndCount -= 2;  else if (endDay.getDay() == 6)  weekEndCount -= 1;  if (beginDay.getDay() == 0) weekEndCount -= 1;  }  else {  if (endDay.getDay() < 6) weekEndCount -= 1;  if (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.getTime() && itemDay.getTime() <= end.getTime() && (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.getTime() && itemDay.getTime() <= end.getTime() && itemDay.getDay() > 0 && itemDay.getDay() < 6)  weekEndCount += 1;  });  //工作日 = 总天数 - 周末天数(包含法定假日并排除调休日)  return days - weekEndCount;  }function getDate(strDate) {            var date = eval('new Date(' + strDate.replace(/d+(?=-[^-]+$)/             function (a) { return parseInt(a 10) - 1; }).match(/d+/g) + ')');            return date;        }    var r = getWorkDayCount('cn'getDate('2015-07-01')getDate('2015-07-06'));    alert(r);</script>

解决方案

没人回答呀,求指教呀。哥哥们!

解决方案二:
参考:http://www.jb51.net/article/20886.htm

时间: 2024-11-17 10:58:30

js 工作日 php-PHP计算一个时间段中的工作日天数的相关文章

控制-JS如何显示和隐藏一个表格中的所有表单输入框。

问题描述 JS如何显示和隐藏一个表格中的所有表单输入框. 现在是想要把表格的补货一栏去掉,在表格底部加一个按钮,点击以后 已补货的数字变成输入框.然后再次点击以后提交. 我想要的是一个按钮,控制所有"已补货"列,所有数字都变成输入框. 控制表格里面加了class是content的数据, 点击以后 <span class=content>0</span> 变输入框,其他列数据不要变. <tr> <td> </td> <td

sql-怎么计算一个表中多列的空值个数

问题描述 怎么计算一个表中多列的空值个数 比如我现在有105个字段,每个字段里面都有空值,请问什么样的SQL语句可以实现最后显示的结果是列名加空值个数,10个列的结果都要显示出来. 解决方案 select count (表名.列) from 表名 where 表名.列= (SELECT 表名.列 FROM 表名 where 表名.列名=null) 解决方案二: 得到一个空值 解决方案三: select count(*) from 表 where 是空 解决方案四: postgresql用SQL语

jsp中调用上一个网页中调用的js里面的input text的值

问题描述 jsp中调用上一个网页中调用的js里面的input text的值 套了一个时间选择的模板,想要获取开始时间和结束时间,但是这两个出现在调用的js里面,怎么获取 解决方案 将控件绑定id,js中有通过id设置控件内容的方法 解决方案二: 当前网页和上一个网页是什么关系?iframe还是window.open? iframe可以用parent或者document.getElementById('ifrID').contentWindow得到相互引用, window.open用opener或

JS 实现获取打开一个界面中输入的值_javascript技巧

需求在一个界面中打开另一个界面,通过JS获取在另一个界面中用户输入的值.示例:Index.html 复制代码 代码如下:    <html>    <head>      <meta http-equiv="content-type" content="text/html; charset=gbk">          <title>主页</title>         <script type=&q

求一个简单的算法计算2个时间间隔的工作日。

问题描述 我要的是一个简单的算法计算2个时间间隔的工作日,也就是除去周六和周日,哪位能提供个算法思路,多谢!尽量详细点,谢谢! 解决方案 解决方案二:monday->wednesdaytuesday->tursday......sunday->tuesday解决方案三:看下是不是对的.publicstaticvoidmain(String[]args){try{System.out.println(check(string2Date("2010-4-29"),stri

【编程错误求指教】计算一个数字前的所有数字中1出现的次数

问题描述 [编程错误求指教]计算一个数字前的所有数字中1出现的次数 function deal(m) { var n = 0, i = 0,h = 0; for (; n < m + 1; n++) { i = n; while (i > 0) { if ((i % 10) == 1) { h++; }; i /= 10; }; }; alert(h); }; deal(11); 计算11之前包括11数字中1出现的次数 错在哪里 11的结果是3 谢谢 解决方案 直接用正则表达式就可以了. va

Nodejs express框架一个工程中同时使用ejs模版和jade模版_node.js

在某些项目中,比如你接手了一个别人的项目然后你不想用蛋疼的ejs,或者你不想用蛋疼的jade.你有不想重写之前的页面,那么你现在可能需要新引入ejs或者jade模块,你仅仅需要做下面两步也许就能完成使用两个模版的工作 1.consolidate.js cd 到项目目录: npm install consolidate --save 打开项目的app.js(也许你的叫其他名字) 把app.js的形如下面的代码片段 app.set('view engine', 'jade'); 改为 var eng

JSF中如何写js代码提交到JSF的管理Bean的一个方法中

问题描述 请问在JSF中如何写js代码提交到JSF的管理Bean的一个方法中faces-config.xml代码片段 <managed-bean><managed-bean-name>loginAction</managed-bean-name><managed-bean-class>com.test.action.login.LoginAction</managed-bean-class><managed-bean-scope>re

日历-两个js代码放在一个页面中冲突

问题描述 两个js代码放在一个页面中冲突 <script> $.fn.smartFloat = function() { var position = function(element) { var top = element.position().top, pos = element.css("position"); $(window).scroll(function() { var scrolls = $(this).scrollTop(); if (scrolls &