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
相关产品推荐
相关产品推荐

