私はこの問題の解決策を見つけようとしましたが、私の頭の中に道を見いだすことはできません。だからうまくいけば、誰かがこの問題。「利用可能です」という数字を数えてください
出力例を参照してください。私のコードの利用可能なタイムスロットの横に「利用可能です」と表示されますが、何とかしたいと思いますので、1日が完全に予約されていれば「利用可能な時間はありません」などと数えます。
私は$ i = 0と$ i ++を使っていくつかの解決策を試しましたが、私のように動作するようには思えません。以下のコードのための
出力例:
2015年11月18日9時00分00秒午前9時30分00秒2015年11月18日には
2015年11月18日09入手可能です。 30:00 10時30分00秒2015年11月18日に
2015年11月18日10時00分00秒利用可能である10時00分00秒2015年11月18日に
2015から11入手可能です-18 10:30:00〜2015-11-18 11:00:00
年11月18日午前12時00分○○秒 へ2015年11月18日11時30分00秒2015年11月18日11時30分00秒に3210
2015年11月18日11時00分00秒
2015-11-18 12:00:00〜2015-11-18 12:30:00
2015-11-18 12:30:00〜2015-11-18 13:00:00が利用可能です
2015年11月18日13時○○分○○秒2015年11月18日13時30分00秒には、2015年11月18日14:00
2015年11月18日13時30分00秒提供されています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日夜三時00分00秒2015年11月18日午後03時30分00秒
2015年11月18日午後03時30分00秒に2015年11月18日16:00: 00が利用可能である
2015年11月18日午前16時00分00秒2015年11月18日16時30分00秒には、私はを使用
可能です上部に必要な炭素はです。
<?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 />';
}
}
?>