我在显示列表时间时遇到问题。我在mysql中保存了开始时间、结束时间、间隔时间和阻塞时间。
例如
开始时间:09:00
结束时间:15:00
间隔:3
出块时间:10:00-11:00;13:00-14:00
static function getListTime($time_interval,$s_hour, $e_hour, $peakTimesConfig){
switch ($time_interval) {
case '1':
$interval = new DateInterval('PT15M');
break;
case '2':
$interval = new DateInterval('PT30M');
break;
case '3':
$interval = new DateInterval('PT1H');
break;
case '4':
$interval = new DateInterval('PT2H');
break;
}
$result = array();
$time = new DateTime($s_hour);
$eTime = new DateTime($e_hour);
$bookingTimeIntervalSecond = $time_interval * 60;
$unavaibaleTimes = explode(';', $peakTimesConfig);
$arrUnavaibaleTimes = [];
foreach ($unavaibaleTimes as $unavaibaleTime) {
$strTime = explode('-', $unavaibaleTime);
$startTime = strtotime($strTime[0]);
if (!isset($strTime[1])) {
$endTime = $startTime + $bookingTimeIntervalSecond;
} else {
$endTime = strtotime($strTime[1]);
}
$arrUnavaibaleTimes[]=['startTime'=>$startTime,'endTime' => $endTime];
}
//sorting
for($i = 0; $i < count($arrUnavaibaleTimes); $i ++) {
for($j = 0; $j < count($arrUnavaibaleTimes); $j ++) {
if ($arrUnavaibaleTimes[$i]['startTime'] < $arrUnavaibaleTimes[$j]['startTime']) {
$sorting = $arrUnavaibaleTimes[$i];
$arrUnavaibaleTimes[$i] = $arrUnavaibaleTimes[$j];
$arrUnavaibaleTimes[$j]= $sorting;
}
}
}
$i = 0;
while ($time < $eTime) {
foreach($arrUnavaibaleTimes as $times){
if ($time->getTimestamp() < $times['startTime'] || $time->getTimestamp() >= $times['endTime']) {
if(!in_array($time->format("H:i"), $result)){
$result[] = $time->format("H:i");
}
}
else{
break;
}
}
$time->add($interval);
$i++;
}
return $result;
}
我的问题是:我想在没有阻塞时间的情况下显示时间start time段end time。
例如
结果 : 09:00, 11:00, 12:00, 14:00, 15:00