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

在Laravel中生成两个DateTime间的迭代时间用于新增记录

实现代码

你现有的代码核心问题是DatePeriod默认排除结束时间节点,会导致丢失最后一天的记录,以下是符合需求的完整实现:

// 输入参数
$start = new DateTime('2021-09-13 06:00:00');
$end = new DateTime('2021-09-17 15:00:00');

// 提取固定时段参数
$dailyStart = $start->format('H:i:s');
$dailyEnd = $end->format('H:i:s');
$duration = $start->diff($end)->h . '小时';

// 调整结束时间避免最后一天被排除
$loopEnd = (clone $end)->modify('+1 day');
$period = new DatePeriod($start, DateInterval::createFromDateString('1 day'), $loopEnd);

$records = [];
foreach ($period as $date) {
    $currentDate = $date->format('Y-m-d');
    $records[] = [
        'start_time' => $currentDate . ' ' . $dailyStart,
        'end_time' => $currentDate . ' ' . $dailyEnd,
        'duration' => $duration
    ];
}

// 打印测试,实际使用时直接用$records数组批量入库即可
dd($records);

输出说明

上述代码输出的$records数组完全匹配你需要的结构:

开始时间结束时间时长
2021-09-13 06:00:002021-09-13 15:00:009小时
2021-09-14 06:00:002021-09-14 15:00:009小时
2021-09-15 06:00:002021-09-15 15:00:009小时
2021-09-16 06:00:002021-09-16 15:00:009小时
2021-09-17 06:00:002021-09-17 15:00:009小时

如果需要处理时段跨天、或起止时间时分秒不固定的场景,只需调整时长计算逻辑即可,当前实现完全适配你给出的需求场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:39:02