输入多个时间范围,然后返回所有其他时间范围

时间:2019-09-07 09:23:51

标签: php mysql laravel

我正在寻找一种解决方案,当我将一个时间范围(或多个时间范围)作为数组输入时,它将返回除我输入的时间范围之外的所有其他时间范围。

例如:
我输入了[ 0 => ['start' => '8:30:00', 'end' => '9:00:00'], 1 => ['start' => '11:30:00', 'end' => '12:30:00']]

(8:30:00-9:00:00),(11:30:00-12:30:00)

我一直想从8:00:0017:00:00接收

我希望它返回的预期输出是:
[ 0 => ['start' => '8:00:00', 'end' => '8:30:00'], 1 => ['start' => '09:00:00', 'end' => '11:30:00'], 2 => ['start' => '12:30:00', 'end' => '17:00:00']]

(8:00:00-8:30:00),(09:00:00-11:30:00),(12:30:00-17:00:00)

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以简单地使用此概念。您不需要使用任何日期时间库或任何其他概念。只需使用for循环即可正常工作。

<?php
$startingTime = '8:00:00';
$endingTime = '1:00:00';
$time = [ ['start' => '8:30:00', 'end' => '9:00:00'],
             ['start' => '11:30:00', 'end' => '12:30:00']];
$output = [];
for ($x = 0; $x <= count($time); $x++) {
    $t = $time[$x];
    $interval = [];
    $interval['start'] = $startingTime;
    $interval['end'] = ($t['start']=== NULL? $endingTime: $t['start'] );
    array_push($output,$interval);
    $startingTime = $t['end'];
}

print_r($output);

enter image description here

答案 1 :(得分:0)

$aInputDate = [['start' => '08:30:00', 'end' => '09:00:00'],
               ['start' => '11:30:00', 'end' => '12:30:00']];

$sStartTime = strtotime(date('Y-m-d 08:00:00'));
$sEndTime = strtotime(date('Y-m-d 17:00:00'));

while ($sStartTime <= $sEndTime) {
    $aAllTime[] = date('H:i:s', $sStartTime);
    $sStartTime = strtotime('+30 minutes', $sStartTime);
}

foreach ($aInputDate as $key => $value) {
    $iStartKey = array_search($value['start'], $aAllTime);
    unset($aAllTime[$iStartKey]);
    $iStartKey = array_search($value['end'], $aAllTime);
    unset($aAllTime[$iStartKey]);
}

var_dump($aAllTime);