检测时间段冲突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 trueboolean trueboolean falseboolean falseboolean trueboolean trueboolean trueboolean falseboolean trueboolean trueboolean falseboolean false

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

相关推荐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值