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

本文介绍了一个用于判断指定时间是否符合预设时间段的PHP函数,包括跨天和特定周几的情况。通过实例演示了如何配置不同日期和时间范围的规则。

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


代码如下:

<?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 true
boolean true
boolean false
boolean false
boolean true
boolean true
boolean true
boolean false
boolean true
boolean true
boolean false
boolean false
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值