You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何判断时间是否处于指定时间范围内

PHP判断时间是否处于跨天时间区间的简便方法

这个问题我之前也碰到过,跨天的时间区间判断确实容易绕晕,不用考虑日期的话,把时间转换成分钟数来处理是最直观简便的方式,核心思路就是把所有时间都转换成当天的总分钟数,再根据区间是否跨天来做逻辑判断。

具体实现思路

  1. 将目标时间、区间开始时间、区间结束时间都转换成当天的总分钟数(比如22:30就是22*60+30=1350分钟,04:20就是4*60+20=260分钟)
  2. 判断区间是否跨天:如果开始时间的分钟数 < 结束时间的分钟数,说明是同一天内的区间;反之则是跨天区间
  3. 根据区间类型做判断:
    • 同一天区间:目标分钟数在开始和结束分钟数之间(包含边界)
    • 跨天区间:目标分钟数 >= 开始分钟数 或者 目标分钟数 <= 结束分钟数(包含边界)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:27:33