策画指定工作日后的日期

    添加时间:2013-8-1 点击量:

    比来项目中要用到如许一个功能,策画N个工作日之后的日期,如今想到如下规划感触感染可以解决题目。


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


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



    <?php 
    
    date_default_timezone_set(
    Asia/Shanghai);//设置好一个时区


    ¥now=mktime(0, 0, 0,8,1,2013);//开端的日期,可所以如今或其他你想要的某一个日期的时候戳,这里设置2013-08-01
    ¥i=10;//请求计数的工作日数量

    /国度法定假日一般可以存储在数据库中进行保护,包含休假的日期,和周末调休上班的日期两类,作为演示对应日期临时放在数组中/
    ¥working=arraymktime(0, 0, 0,8,3,2013),mktime(0, 0, 0,8,11,2013));//周末调休上班的日期
    ¥holiday=arraymktime(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),++¥daydate(Y,¥now));//加一天输出新的时候戳
    ifin_array¥newdate¥working)){//断定一下,若是属于调休的则工作日计数加一,若是法定假日调休存在数据库中,则这里须要一条查询语句来查询一下
    ¥w++;
    }
    else{//如不属于调休的则再进行断定,既不是周六周日,也不是法定假日,则工作日计数再加上一
    ifdate(w,¥newdate)!=0&&date(w,¥newdate)!=6&&!in_array¥newdate¥holiday)){
    ¥w++;
    }
    }
    }

    echo date(Y-m-d,¥newdate);//最后得出的时候戳就是请求的10个工作日后的日期了。

    ?>


    容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
    分享到: