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

如何根据当前时间显示下一个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:15:37