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

如何调整二维数组行数据使时间戳连续?

作业时间序列调整问题

我有一个存储作业信息的二维数组,每个作业包含:

  • needed_at:作业开始时间
  • ended_at:作业结束时间(始终比开始时间晚60分钟)
  • add:下一个作业开始前需间隔的分钟数

需要调整所有行数据,使每个作业的开始时间等于前一个作业的结束时间 + 前一个作业的add值,同时更新当前作业的结束时间(保持比新开始时间晚60分钟)。

示例输入数组

[
    [
        'id' => 9,
        'needed_at' => '2023-02-26 03:31:04',
        'ended_at' => '2023-02-26 04:31:04',
        'add' => 20
    ],
    [
        'id' => 6,
        'needed_at' => '2023-02-26 04:51:04',
        'ended_at' => '2023-02-26 05:51:04',
        'add' => 30
    ],
    [
        'id' => 7,
        'needed_at' => '2023-02-26 09:21:04',
        'ended_at' => '2023-02-26 10:21:04',
        'add' => 30
    ]
]

预期调整结果

[
    [
        'id' => 9,
        'needed_at' => '2023-02-26 03:31:04',
        'ended_at' => '2023-02-26 04:31:04',
        'add' => 20
    ],
    [
        'id' => 6,
        'needed_at' => '2023-02-26 04:51:04',
        'ended_at' => '2023-02-26 05:51:04',
        'add' => 30
    ],
    [
        'id' => 7,
        'needed_at' => '2023-02-26 06:21:04',  // 基于id=6的结束时间+30分钟计算得出
        'ended_at' => '2023-02-26 07:21:04',   // 基于当前行新的开始时间+60分钟
        'add' => 30                            // 无后续作业,未被使用
    ]
]

尝试的代码

foreach ($jobs as $k => $j) {
    $s = $k+1;
    $date = new \DateTimeImmutable($j->ended_at);
    $add = $j->add;
    $date_new = $date->modify('+'.$add.' minutes');
    $needed_at = $date_new->format('Y-m-d H:i:s');
    $data['needed_at'] = $needed_at;
    
    $date2 = new \DateTimeImmutable($needed_at);
    $ended_at = $date2->modify('+60 minutes');
    $data['ended_at'] = $ended_at->format('Y-m-d H:i:s');
    $d[]=[
        'id' => $jobs[$s]->id,
        'needed_at' => $needed_at,
        'ended_at' => $data['ended_at'],
        'add' => $add
    ];
}

这段代码无法正常工作,请问能否将第一次迭代修改的数据用于第二次迭代?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:04:55