이 문제에 대한 해결책을 찾아 내려고 노력했지만 실제로는 머리에 쓰이는 방법을 찾아 낼 수 없습니다. 따라서이 문제에 대한 간단하고 스마트 한 해결책이 있기를 바랍니다. .'사용할 수있는 금액'을 계산하십시오.
출력 예에서 알 수 있습니다. 내 코드의 사용 가능한 타임 슬롯 옆에 "사용 가능"이라고 표시되지만, 어떻게 든 작성하고 싶습니다. 따라서 하루가 충분하게 예약되어 있으면 "사용할 수있는 시간이 없습니다"와 같은 내용을 계산하거나 반향시킬 수 있습니다.
나는 $ i = 0을 사용하고 $ i ++를 사용하여 몇 가지 해결책을 시도했지만 실제로 그렇게 할 수는 없습니다. 아래 코드
출력 예 :
2015년 11월 18일 9시 0분 0초 9시 30분 0초 2015년 11월 18일로는
2015년 11월 18일 09로 볼 수 있습니다 : 30:00 2015년 11월 18일에 10시 0분 0초 사용할 수
2015년 11월 18일 10시 0분 0초 2015년 11월 18일에 10시 30분 0초 사용할 수 있습니다
2015-11 -18 10:30:00 ~ 2015-11-18 11:00:00
년 11월 18일 12시 0분 0초 에 2015년 11월 18일 11시 30분 0초2015년 11월 18일 11시 30분 0초에3210
2015년 11월 18일 11시 0분 0초
2015-11-18 12:00:00 to 2015-11-18 12:30:00
2015-11-18 12:30:00 to 2015-11-18 13:00:00 is available
2015년 11월 18일 13시 0분 0초 2015년 11월 18일에 13시 30분 0초는 2015년 11월 18일 14:00
2015년 11월 18일 13시 30분 0초 볼 수 있습니다 : 00 사용 가능
2015-11-18 14:00:00 - 2015-11-18 14:30:00 사용 가능
2015-11-18 14:30:00 - 2015-11-18 15:00 : 00
2015년 11월 18일 15시 0분 0초 2015년 11월 18일 15시 30분 0초
2015년 11월 18일 15시 30분 0초에 2015년 11월 18일 16:00 : 00 사용할 수
2015년 11월 18일 16시 0분 0초 2015년 11월 18일에 16시 30분 0초 내가 0,123,331,289을 사용
볼 수 있습니다 상단에 필요한 탄소는입니다.
<?php
require 'Carbon.php';
use Carbon\Carbon;
$schedule = [
'start' => '2015-11-18 06:00:00',
'end' => '2015-11-18 18:00:00',
];
$start = Carbon::instance(new DateTime($schedule['start']));
$end = Carbon::instance(new DateTime($schedule['end']));
$minInterval = new DateInterval('PT30M');
$reqInterval = new DateInterval('PT45M');
$events = [
[
'created_at' => '2015-11-18 10:00:00',
'updated_at' => '2015-11-18 13:00:00',
],
[
'created_at' => '2015-11-18 14:00:00',
'updated_at' => '2015-11-18 16:00:00',
],
];
function slotAvailable($from, $to, $events, $workEnd){
foreach($events as $event){
$eventStart = new DateTime($event['created_at']);
$eventEnd = new DateTime($event['updated_at']);
if(($from >= $eventStart && $to <= $eventEnd) || ($from < $eventEnd && $to > $eventEnd) || ($from < $eventStart && $to > $eventStart) || ($to > $workEnd)){
return false;
}
}
return true;
}
foreach(new DatePeriod($start, $minInterval, $end) as $slot){
$to = $slot->copy()->add($reqInterval);
$workEnd = $schedule['end'];
echo $slot->toDateTimeString() . ' to ' . $to->toDateTimeString();
if(slotAvailable($slot, $to, $events, $workEnd)){
echo ' is available';
}
echo '<br />';
}
}
?>