問題是,我似乎無法確定一種方法來確保它不會輸出'可用'到已在$ events變量中使用的時間段。時間間隔可用
至於輸出的例子,你可以看到2015-11-18 10:00:00至2015-11-18 10:30:00它聲稱該插槽是可用的,但這不應該是可用的,因爲那裏是該時間段的事件。下面代碼
輸出例如:
2015年11月18日9時00分○○秒到2015年11月18日9點30分○○秒可用
2015年11月18日09: 30:00至2015年11月18日10:00:00可用
2015年11月18日10:00:00至2015年11月18日10:30:00可用
2015-11 -18 10:30:00至2015-11-18 11:00:00
2015-11-18 11:00:00至2015-11-18 11:30:00
2015-11-18 11:30:00至2015-11-18 12: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:00:00至2015年11月18日13:30:00可用
2015年11月18日13:30:00至2015年11月18日14: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日15:00:00至2015年11月18日15:30:00
2015年11月18日15:30:00至2015年11月18日16:00: 00,請
2015年11月18日16:00:00至2015年11月18日16:30:00可用
我用http://carbon.nesbot.com/爲頂部所需的碳。
<?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){
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)){
return false;
}
}
return true;
}
foreach(new DatePeriod($start, $minInterval, $end) as $slot){
$to = $slot->copy()->add($reqInterval);
echo $slot->toDateTimeString() . ' to ' . $to->toDateTimeString();
if(slotAvailable($slot, $to, $events)){
echo ' is available';
}
echo '<br />';
}
}
?>
似乎還給我一個問題,如果我改變$ reqInterval = new DateInterval('PT30M');到$ reqInterval = new DateInterval('PT45M'); – Nature