如何调整二维数组行数据使时间戳连续?
作业时间序列调整问题
我有一个存储作业信息的二维数组,每个作业包含:
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
相关产品推荐
相关产品推荐

