PHP如何判断时间是否处于指定时间范围内
PHP判断时间是否处于跨天时间区间的简便方法
这个问题我之前也碰到过,跨天的时间区间判断确实容易绕晕,不用考虑日期的话,把时间转换成分钟数来处理是最直观简便的方式,核心思路就是把所有时间都转换成当天的总分钟数,再根据区间是否跨天来做逻辑判断。
具体实现思路
- 将目标时间、区间开始时间、区间结束时间都转换成当天的总分钟数(比如22:30就是
22*60+30=1350分钟,04:20就是4*60+20=260分钟) - 判断区间是否跨天:如果开始时间的分钟数 < 结束时间的分钟数,说明是同一天内的区间;反之则是跨天区间
- 根据区间类型做判断:
- 同一天区间:目标分钟数在开始和结束分钟数之间(包含边界)
- 跨天区间:目标分钟数 >= 开始分钟数 或者 目标分钟数 <= 结束分钟数(包含边界)
PHP代码实现
下面是封装好的函数,直接传入时间字符串即可使用:
function isTimeInRange($targetTime, $startTime, $endTime) { // 把时间字符串转换成总分钟数的辅助函数 function timeToMinutes($time) { list($hour, $minute) = explode(':', $time); return (int)$hour * 60 + (int)$minute; } $target = timeToMinutes($targetTime); $start = timeToMinutes($startTime); $end = timeToMinutes($endTime); if ($start < $end) { // 同一天的时间区间(比如08:00-18:00) return $target >= $start && $target <= $end; } else { // 跨天的时间区间(比如22:30-04:20) return $target >= $start || $target <= $end; } }
测试示例
我们来验证几个情况:
- 测试
13:23是否在22:30-04:20区间:var_dump(isTimeInRange('13:23', '22:30', '04:20')); // 输出 bool(false) - 测试
23:00是否在区间:var_dump(isTimeInRange('23:00', '22:30', '04:20')); // 输出 bool(true) - 测试
03:15是否在区间:var_dump(isTimeInRange('03:15', '22:30', '04:20')); // 输出 bool(true) - 测试
05:00是否在区间:var_dump(isTimeInRange('05:00', '22:30', '04:20')); // 输出 bool(false)
这种方法既不用处理日期,代码逻辑也清晰,不管是跨天还是不跨天的区间都能兼容,非常实用。
内容的提问来源于stack exchange,提问作者Noki
相关产品推荐
相关产品推荐

