PHP 날짜 측면

巴扎黑
巴扎黑원래의
2016-11-29 11:52:071157검색

date_default_timezone_set('PRC');
/**
* 특정 날짜로부터 특정 일수가 지난 날짜를 가져옵니다.
* 토요일, 일요일, 공휴일은 제외
* @param $start 시작 날짜
* @param $offset 개수 일 경과
* @param $Exception 예외 휴일
* @param $allow 허용 날짜(예약된 매개변수)
* @return
* 예: 입력(2010-06-25,5,'' ) ,get2010-07-02
*/
함수 getEndDay( $start='now', $offset=0, $Exception='', $allow='' ){
//토요일, 일요일, 공휴일을 제외하지 않고 먼저 결과를 계산합니다
$starttime = strtotime($start);
$endtime = $starttime + $offset * 24 * 3600;
$ end = date('Y-m-d', $endtime);
//토요일과 일요일로 인한 오프셋을 계산합니다.
$weekday = date('N', $starttime);//요일을 가져옵니다. 주 값: 1-7
$remain = $offset % 7;
$newoffset = 2 * ($offset - $remain) / 7;//매주 2일을 다시 계산해야 합니다
if ( $remain > 0 ){//주중 반올림
$tmp = $weekday + $remain;
if( $tmp >= 7 ){
$newoffset += 2;
}else if( $tmp == 6 ){
           $newoffset += 1; > $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);                     ~ /중복방지 공휴일 및 주말
                                                                                                > $종료시간 ){
$weekday_t = 날짜('N', $tmp_time);
if($weekday_t <= 5){
                                             | 재귀적으로 등가 연산
if($newoffset > 0){
  #echo "[{$start} -> {$offset}] = [{$end} -> {$newoffset}]".
n";
return getEndDay($end,$newoffset,$Exception,$allow);
}else{
        $end;
    }
}
/**
* 폭력적인 루프 방식
*/
함수 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 "".($t3-$t2)."를 사용하세요." s
";    


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.