zoukankan      html  css  js  c++  java
  • 计算指定工作日后的日期

    最近项目中要用到这样一个功能,计算N个工作日之后的日期,现在想到如下方案感觉可以解决问题。

    这个说明下,工作日还是按照国家规定的来算的,就是周一到周五、法定假期前后调休需上班的都算作工作日,周六、周日和法定假日则不算工作日,法定假日和调休上班的日期可存在数据库中进行维护。

    代码如下,感觉效率不算很高,如有更好的办法,还请高人分享一下。

    <?php 
    date_default_timezone_set("Asia/Shanghai");//设置好一个时区
    
    
    $now=mktime(0, 0, 0,8,1,2013);//开始的日期,可以是现在或其他你想要的某一个日期的时间戳,这里设置2013-08-01
    $i=10;//要求计数的工作日数量
    
    /*国家法定假日一般可以存储在数据库中进行维护,包括休假的日期,和周末调休上班的日期两类,作为演示对应日期暂时放在数组中*/
    $working=array(mktime(0, 0, 0,8,3,2013),mktime(0, 0, 0,8,11,2013));//周末调休上班的日期
    $holiday=array(mktime(0, 0, 0,8,8,2013),mktime(0, 0, 0,8,6,2013));//法定假期
    
    $day=date("d",$now);//把当天的日期给一个变量
    $w=0;//工作日计数变量
    while($w<$i){//当达到要求的工作日数量则停止循环
        $newdate=mktime(0, 0, 0,date("m",$now),++$day,date("Y",$now));//加一天输出新的时间戳
        if(in_array($newdate, $working)){//判断一下,如果属于调休的则工作日计数加一,如果法定假日调休存在数据库中,则这里需要一条查询语句来查询一下
            $w++;
        }else{//如不属于调休的则再进行判断,既不是周六周日,也不是法定假日,则工作日计数再加上一
            if(date("w",$newdate)!=0&&date("w",$newdate)!=6&&!in_array($newdate, $holiday)){
                    $w++;
            }
        }
    }
        
    echo date("Y-m-d",$newdate);//最后得出的时间戳就是要求的10个工作日后的日期了。
    
    ?>
  • 相关阅读:
    清除浮动(float)的影响
    再说模拟测试
    关于vue移动端 ios 的兼容问题(二)
    微信小程序 开发 坑(3)
    记录开发微信小程序的坑(3)
    记录开发微信小程序的坑(2)
    记录微信小程序开发遇到的坑
    记录git常用命令
    配置vue项目stylus变量遇见的问题
    如何在vue项目打包去掉console
  • 原文地址:https://www.cnblogs.com/zhucheer/p/3229106.html
Copyright © 2011-2022 走看看