• 技术文章 >php教程 >php手册

    php 排除周末与节假日程序实例代码

    2016-05-25 16:42:30原创1063
     0 ){//周余凑整 
            $tmp = $weekday + $remain; 
            if( $tmp >= 7 ){ 
                $newoffset += 2; 
            }else if( $tmp == 6 ){ 
                $newoffset += 1; 
            } 
            //考虑当前为周六周日的情况 
            if( $weekday == 6 ){ 
                $newoffset -= 1; 
            }else if( $weekday == 7 ){ 
                $newoffset -= 2; 
            } 
        } 
        //再计算节假日引起的偏移 
        if( is_array($exception) ){//多个节假日 
            foreach ($exception as $day){ 
                $tmp_time = strtotime($day); 
                if( $tmp_time>$starttime && $tmp_time<=$endtime ){//在范围(a,b]内 
                    $weekday_t = date('n', $tmp_time); 
                    if($weekday_t <= 5){//防止节假日与周末重复 
                        $newoffset += 1; 
                    } 
                } 
            } 
        }else{//单个节假日 
            if( $exception!='' ){ 
                $tmp_time = strtotime($exception); 
                if( $tmp_time>$starttime && $tmp_time<=$endtime ){ 
                    $weekday_t = date('n', $tmp_time); 
                    if($weekday_t <= 5){ 
                        $newoffset += 1; 
                    } 
                } 
            } 
             
        } 
        //根据偏移天数,递归做等价运算111cn.net 
        if($newoffset > 0){ 
            #echo "[{$start} -> {$offset}] = [{$end} -> {$newoffset}]"."
    "; return getendday($end,$newoffset,$exception,$allow); }else{ return $end; } } /** * 暴力循环方法 */ function getendday2( $start='now', $offset=0, $exception='', $allow='' ){ $starttime = strtotime($start); $tmptime = $starttime + 24*3600; while( $offset > 0 ){ $weekday = date('n', $tmptime); $tmpday = date('y-m-d', $tmptime); $bfd = false;//是否节假日 if(is_array($exception)){ $bfd = in_array($tmpday,$exception); }else{ $bfd = ($exception==$tmpday); } if( $weekday<=5 && !$bfd){//不是周末和节假日 $offset--; #echo "tmpday={$tmpday}"."
    "; } $tmptime += 24*3600; } return $tmpday; } $exception = array( '2010-01-01','2010-01-02','2010-01-03', '2010-04-03','2010-04-04','2010-04-05', '2010-05-01','2010-05-02','2010-05-03', '2010-06-14','2010-06-15','2010-06-16', '2010-09-22','2010-09-23','2010-09-24', '2010-10-01','2010-10-02','2010-10-03','2010-10-04', '2010-10-05','2010-10-06','2010-10-07', ); //echo getendday('2010-08-27',3,''); //echo getendday('2010-06-25',15,'2010-07-07'); $t1 = microtime(); echo getendday('2010-05-12',66,$exception)."
    "; $t2 = microtime();echo "use ".($t2-$t1)." s
    "; echo getendday2('2010-05-12',66,$exception)."
    "; $t3 = microtime();echo "use ".($t3-$t2)." s
    ";


    永久链接:

    转载随意!带上文章地址吧。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 排除周末 节假日
    上一篇:php 刷新输出缓冲代码 下一篇:简单实例php验证码代码
    Web大前端开发直播班

    相关文章推荐

    • 在WAS CE上运行PHP• Mysql和网页显示乱码解决方法集锦• php.ini 中文版• PHP数据库开发知多少• 刷新PHP缓冲区为你的站点加速
    新人一分购

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网