如何根据当前时间显示下一个DateInterval时间值?
问题描述
我通过间隔3小时的DateInterval获取了开始时间到结束时间之间的所有时间点,结果示例如下:15:00 | 18:00 | 21:00 | 00:00 | 03:00 (以此类推...)
现在我需要修改代码,只显示基于当前时间的下一个符合该间隔规则的时间值,而非全部时间点。
示例:若当前时间为19:29,应输出21:00。
我目前的代码如下:
$start = new DateTime('2022-12-18 15:00:00'); $interval = DateInterval::createFromDateString('3 hours'); $end = new DateTime('2022-12-31 15:00:00'); $occurrences = new DatePeriod($start, $interval, $end); foreach ($occurrences as $occurrence) { echo $occurrence->format('H:i') . PHP_EOL; }
解决方案
你可以通过遍历时间周期,找到第一个晚于当前时间的时间点,找到后立即输出并终止循环即可。代码修改如下:
$start = new DateTime('2022-12-18 15:00:00'); $interval = DateInterval::createFromDateString('3 hours'); $end = new DateTime('2022-12-31 15:00:00'); $currentTime = new DateTime(); // 获取当前时间 $occurrences = new DatePeriod($start, $interval, $end); foreach ($occurrences as $occurrence) { // 找到第一个晚于当前时间的时间点 if ($occurrence > $currentTime) { echo $occurrence->format('H:i'); break; // 找到后立即终止循环,无需继续遍历 } }
补充说明
- 如果当前时间已经晚于结束时间
$end,这段代码不会输出任何内容,你可以根据需求添加对应的提示逻辑 - 若需要包含结束时间本身,可以调整判断条件为
$occurrence >= $currentTime,确保符合条件的边界时间也能被输出
内容的提问来源于stack exchange,提问作者Zerers
相关产品推荐
相关产品推荐

