我有信息(开始时间戳和完成时间戳)在每个红色标记的时期。

我想要做到的是:

最后一段时间还应包含合并期间的数目,如蓝跨度所示。
从最小值和最大值开始,我试着每分钟迭代一次,但我想这不是解决这个问题的最佳方法。实际上,我在这里已经没有任何想法了:(示例数据:
[0] => Array
(
[start] => 2018-11-8 09:00
[startTimestamp] => 1541664000
[finish] => 2018-11-8 15:00
[finishTimestamp] => 1541685600
[machine_id] => 1
)
[1] => Array
(
[start] => 2018-11-8 01:30
[startTimestamp] => 1541637000
[finish] => 2018-11-8 05:30
[finishTimestamp] => 1541651400
[machine_id] => 1
)
[2] => Array
(
[start] => 2018-11-8 10:00
[startTimestamp] => 1541667600
[finish] => 2018-11-8 18:30
[finishTimestamp] => 1541698200
[machine_id] => 4
)
[3] => Array
(
[start] => 2018-11-8 09:00
[startTimestamp] => 1541664000
[finish] => 2018-11-8 15:00
[finishTimestamp] => 1541685600
[machine_id] => 5
)
[4] => Array
(
[start] => 2018-11-8 01:30
[startTimestamp] => 1541637000
[finish] => 2018-11-8 05:30
[finishTimestamp] => 1541651400
[machine_id] => 5
)谢谢@solarc
$startEndTimes = [];
foreach ($periodsData as $periodsDatum) {
$startEndTimes[$periodsDatum['startTimestamp']] = date('Y-m-d H:i:s', $periodsDatum['startTimestamp']);
$startEndTimes[$periodsDatum['finishTimestamp']] = date('Y-m-d H:i:s', $periodsDatum['finishTimestamp']);
}
$split = [];
foreach ($periodsData as $periodsDatum) {
foreach ($startEndTimes as $timestamp => $dateTime) {
if ($timestamp < $periodsDatum['finishTimestamp'] AND $timestamp > $periodsDatum['startTimestamp']) {
$split[] = [
'machine_id' => $periodsDatum['machine_id'],
'startTimestamp' => $periodsDatum['startTimestamp'],
'finishTimestamp' => $timestamp,
'start' => $periodsDatum['start'],
'finish' => date('Y-n-j H:i:s', $timestamp),
];
$split[] = [
'machine_id' => $periodsDatum['machine_id'],
'startTimestamp' => $timestamp,
'finishTimestamp' => $periodsDatum['finishTimestamp'],
'start' => date('Y-n-j H:i:s', $timestamp),
'finish' => $periodsDatum['finish'],
];
}
}
}发布于 2018-11-07 17:30:40
https://stackoverflow.com/questions/53194211
复制相似问题