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

PHP实现今日20:00至次日07:59的时间区间展示问题

解决PHP跨天时间区间时段无输出的问题

嘿,我来帮你排查这个问题~

你遇到的无输出情况,核心原因是时间解析的逻辑问题:

  • 用strtotime('20:00:00')得到的是今天的20:00:00对应的时间戳
  • 用strtotime('07:59:59')得到的是今天的07:59:59对应的时间戳

这时候$time(今天20点的时间戳)明显大于$timeStop(今天7点59分的时间戳),while循环的条件$time < $timeStop永远不成立,循环根本没执行,自然看不到任何输出。

修正方案

因为你的需求是展示今日20:00到次日07:59的30分钟时段,所以需要把结束时间指定为次日的07:59:59,这里有两种实现方式:

方式1:直接指定次日结束时间(简单直接)

$start = '20:00:00';
$end = '07:59:59'; 
// 给结束时间拼接"+1 day",让strtotime解析为次日的对应时间
$time = strtotime($start);
$timeStop = strtotime($end . ' +1 day'); 

while($time < $timeStop) {
    $currentTime = date('H:i', $time);
    // 累加30分钟
    $time = strtotime('+30 minutes', $time);
    $nextTime = date('H:i', $time);
    echo $currentTime . ' - ' . $nextTime . '<br/>';
}

方式2:通用判断(兼容跨天/不跨天场景)

如果以后可能用到非跨天的时间区间,可以加个判断自动处理:

$start = '20:00:00';
$end = '07:59:59'; 

$time = strtotime($start);
$rawEndTime = strtotime($end);

// 判断开始时间是否晚于结束时间,是则说明跨天,给结束时间加1天
$timeStop = $time > $rawEndTime ? strtotime($end . ' +1 day') : $rawEndTime;

while($time < $timeStop) {
    $currentTime = date('H:i', $time);
    $time = strtotime('+30 minutes', $time);
    $nextTime = date('H:i', $time);
    echo $currentTime . ' - ' . $nextTime . '<br/>';
}

运行修正后的代码,就能得到从20:00开始,每30分钟一个时段,直到次日07:30-08:00(因为07:59:59是结束点,最后一个时段会到07:30-08:00,但不会超过07:59:59的限制)的输出啦。

内容的提问来源于stack exchange,提问作者HiDayurie Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:03:16