详解php 检查是否匹配指定时间段的方法

jacklove
jacklove 原创
2023-03-30 20:36:02 1276浏览

因工作开发需要,需要判断一个时间是否在指定的时间段内,且需要支持判断周几及跨天的情况,因此写了以下这个方法,分享给大家学习使用。

代码如下:

<?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'])){                    // 检查当天时间是否匹配,开始时间-当天零点
                    if($curhm>=$starttime){                        return true;
                    }

                }                // 检查上一天周几是否匹配
                if(in_array($prew, $v['week'])){                    // 检查上一天时间是否匹配,当天零点-结束时间
                    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 trueboolean trueboolean falseboolean falseboolean trueboolean trueboolean trueboolean falseboolean trueboolean trueboolean falseboolean false

本篇文章讲解了php 检查是否匹配指定时间段的方法,更多相关内容请关注php中文网。

相关推荐:

如何JS获取访问设备信息的方法

mysql5.7导出数据提示--secure-file-priv选项问题的解决方法

如何通过php 实现debug_backtrace方法跟踪代码调用

以上就是详解php 检查是否匹配指定时间段的方法的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。