Home  >  Article  >  Backend Development  >  Detailed explanation of the method of checking whether it matches the specified time period in PHP

Detailed explanation of the method of checking whether it matches the specified time period in PHP

jacklove
jackloveOriginal
2018-06-08 16:07:461817browse

Due to the needs of work development, it is necessary to determine whether a time is within a specified time period, and it needs to support the determination of days of the week and spans of days, so I wrote the following method and shared it with everyone to learn and use.

The code is as follows:

<?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(&#39;w&#39;, $curtime);    // 上一天周几
    $prew = date(&#39;w&#39;, $curtime-86400);    // 当前时分
    $curhm = date(&#39;H:i&#39;, $curtime);    // 循环指定日期时段,检查是否匹配
    foreach($config as $k=>$v){        // 循环时段
        foreach($v[&#39;range&#39;] as $t){            list($range, $next_day) = explode(&#39;,&#39;, $t);            // 获取时段的开始结束时间
            list($starttime, $endtime) = explode(&#39;-&#39;, $range);            // 当天
            if($next_day==0){                // 检查周几是否匹配
                if(in_array($curw, $v[&#39;week&#39;])){                    // 检查时间是否匹配
                    if($curhm>=$starttime && $curhm<=$endtime){                        return true;
                    }

                }            // 跨天
            }else{                // 检查当天周几是否匹配
                if(in_array($curw, $v[&#39;week&#39;])){                    // 检查当天时间是否匹配,开始时间-当天零点
                    if($curhm>=$starttime){                        return true;
                    }

                }                // 检查上一天周几是否匹配
                if(in_array($prew, $v[&#39;week&#39;])){                    // 检查上一天时间是否匹配,当天零点-结束时间
                    if($curhm<=$endtime){                        return true;
                    }

                }

            }

        }

    }    return false;

}?>

demo:

<?php// 指定日期时段设定$config = array(    array(        &#39;week&#39; => array(1,2,3,4,5), // 周一至周五
        &#39;range&#39; => array(&#39;08:00-12:00,0&#39;, &#39;14:00-18:00,0&#39;, &#39;20:00-22:00,0&#39;)
    ),    array(        &#39;week&#39; => array(0,6), // 周六周日
        &#39;range&#39; => array(&#39;08:00-18:00,0&#39;, &#39;20:00-02:00,1&#39;), // 0:不跨天,1:跨天
    )
);// 检查时间是否匹配$check_time = array(    null,               // 当前日期时间,2017-10-29 11:40 周日
    &#39;2017-10-23 11:00&#39;, // 周一
    &#39;2017-10-24 12:01&#39;, // 周二
    &#39;2017-10-25 19:59&#39;, // 周三
    &#39;2017-10-26 21:59&#39;, // 周四
    &#39;2017-10-27 22:00&#39;, // 周五
    &#39;2017-10-28 12:01&#39;, // 周六
    &#39;2017-10-28 18:01&#39;, // 周六
    &#39;2017-10-29 01:59&#39;, // 周日
    &#39;2017-10-30 01:59&#39;, // 周一
    &#39;2017-10-30 02:01&#39;, // 周一
    &#39;2017-10-31 01:59&#39;, // 周二);foreach($check_time as $time){
    var_dump(check_time_match($config, strtotime($time)));
}?>

Output:

boolean trueboolean trueboolean falseboolean falseboolean trueboolean trueboolean trueboolean falseboolean trueboolean trueboolean falseboolean false

This article explains how PHP checks whether it matches the specified time period. For more related content, please pay attention to the PHP Chinese website.

Related recommendations:

How to get access to device information using JS

mysql5.7 export data prompt--secure Solution to the -file-priv option problem

How to implement the debug_backtrace method through php to track code calls

The above is the detailed content of Detailed explanation of the method of checking whether it matches the specified time period in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn