[英]Merging time periods - php
我在每個紅色標記的期間都有信息(開始時間戳和結束時間戳)。
最終期間也應包含合並期間的數量,如藍色跨度所示。
自最小值和最大值以來,我嘗試過每分鍾進行迭代,但是我想這不是解決此問題的最佳方法。 我實際上在這里用盡了想法:(示例數據:
[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'],
];
}
}
}
設定所有開始和結束時間(無重復)
[01:30, 05:30, 09:00, 10:00, 14:00, 18:30]
如果每個塊在其自己的開始時間和結束時間之間存在時間,則將其拆分(例如,從09:00到15:00的塊被拆分為2:09:00到10:00和10:00到15: 00):
- 01:30 to 05:30 (col 1) - 09:00 to 10:00 (col 1) - 10:00 to 15:00 (col 1) - 10:00 to 15:00 (col 2) - 15:00 to 18:30 (col 2) - 01:30 to 05:30 (col 3) - 09:00 to 10:00 (col 3) - 10:00 to 15:00 (col 3) - 10:00 to 15:00 (col 4) - 15:00 to 18:30 (col 4)
最后,計算跨列重復多少個塊:
- 01:30 to 05:30 (2 times) - 09:00 to 10:00 (2 times) - 10:00 to 15:00 (4 times) - 15:00 to 18:30 (2 times)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.