개발 꿀팁/PHP

php 지정한 시간대가 맞는지 확인하는 방법

Jammie 2022. 9. 12. 17:19
반응형

코드는 다음과 같습니다

<?php
/**
 * 지정한 시간대와 일치하는지 여부 판단
 *
 * Date:    2017-10-29
 * Author:  fdipzone
 * Version: 1.0
 *
 * @param  Array    $config  날짜 시간 설정 지정
 * @param  Int      $time    판단한 날짜 시간, 현재 날짜 시간으로 기본 설정
 * @return Boolean
 */
function check_time_match($config, $time=null){

    $curtime = isset($time)? $time : time();

    // 현재 요일
    $curw = date('w', $curtime);

    // 요일
    $prew = date('w', $curtime-86400);

    // 현시점
    $curhm = date('H:i', $curtime);

    // 검사 날짜를 지정하고 순환과 일치 여부를 시간대다
    foreach($config as $k=>$v){

        // 순환 기간
        foreach($v['range'] as $t){

            list($range, $next_day) = explode(',', $t);

            // 시작 시간 가져오기
            list($starttime, $endtime) = explode('-', $range);

            // 그날
            if($next_day==0){

                // 요일이 일치하는지 검사하기
                if(in_array($curw, $v['week'])){

                    // 시간 일치 여부 확인
                    if($curhm>=$starttime && $curhm<=$endtime){
                        return true;
                    }

                }

            // 하늘을 찌르다
            }else{

                //그날의 요일이 일치하는지 검사하다
                if(in_array($curw, $v['week'])){

                    // 당일 시간 일치 여부 점검, 시작 시간 - 당일 0시
                    if($curhm>=$starttime){
                        return true;
                    }

                }

                // 전일의 요일이 일치하는지 검사하다
                if(in_array($prew, $v['week'])){

                    // 전일 시간 일치 여부 점검, 당일 0시-종료 시간
                    if($curhm<=$endtime){
                        return true;
                    }

                }

            }

        }

    }

    return false;

}
?>

demo:

<?php
// 날짜 시간 설정 지정
$config = array(
    array(
        'week' => array(1,2,3,4,5), // 월요일부터 금요일까지
        'range' => array('08:00-12:00,0', '14:00-18:00,0', '20:00-22:00,0')
    ),
    array(
        'week' => array(0,6), // 토일요일
        'range' => array('08:00-18:00,0', '20:00-02:00,1'), // 0:하늘을 뛰어넘지 않다,1:跨天
    )
);

// 시간 일치 여부 확인
$check_time = array(
    null,               // 현재일시, 2017-10-29 11:40 일요일
    '2017-10-23 11:00', // 월요일
    '2017-10-24 12:01', // 화요일
    '2017-10-25 19:59', // 수요일
    '2017-10-26 21:59', // 목요일
    '2017-10-27 22:00', // 금요일
    '2017-10-28 12:01', // 토요일
    '2017-10-28 18:01', // 토요일
    '2017-10-29 01:59', // 일요일
    '2017-10-30 01:59', // 월요일
    '2017-10-30 02:01', // 월요일
    '2017-10-31 01:59', // 화요일
);

foreach($check_time as $time){
    var_dump(check_time_match($config, strtotime($time)));
}
?>

출력:

boolean true
boolean true
boolean false
boolean false
boolean true
boolean true
boolean true
boolean false
boolean true
boolean true
boolean false
boolean false
반응형