私が望むのは、私の営業時間に従ってタイムスロットリストを計算し、予定によって予約されたタイムスロットをブロックまたは無効にすることです。
私は自分の問題でこれらのことを行い、最後のタスクに固執しました。以下に言及します。
My Service Duration = 60min.
My Today Busines Hours:
start time - 10:00 AM
end time - 3:00 PM
今日の営業時間に従って、15分のタイムスロットリストを生成しました。
$start = strtotime('10:00 AM');
$end = strtotime('3:00 PM');
for( $i = $start; $i <= $end; $i += (60*15))
{
$slotlist[] = date('g:iA', $i);
}
//output
10:00AM
10:15AM
10:30AM
10:45AM
11:00AM
11:15AM
11:30AM
11:45AM
12:00PM
12:15PM
12:30PM
12:45PM
1:00PM
1:15PM
1:30PM
1:45PM
2:00PM
2:15PM
2:30PM
2:45PM
3:00PM
今私は3つの予定を予約しました
予定| 開始時間から終了時間
アポイントメント-1:10:00 AM〜11:00AM(私のサービス期間60分による)
アポイントメント-2:11:15AM〜12:15PM
アポイントメント-3:1:00PM〜2:00PM
//array of all appointment start_time
$appointment_start_time = array('10:00AM','11:15AM','1:00PM');
次に、予定ですでに予約されているタイムスロットを無効にします
foreach($slotlist as $single)
{
if(in_array($single, $appointment_start_time))
{
echo "<input name=start_time type='radio' disabled value='$single' />".$single; echo "<br>";
$time = $single;
$event_length = 60-15; // 60 is time duration
$timestamp = strtotime("$time");
$endtime = strtotime("+$event_length minutes", $timestamp);
$next_time = date('g:i A', $endtime);
//calculate between slots (start-end time)
$start = strtotime($single);
$end = strtotime($next_time);
for( $i = $start; $i <= $end; $i += (60*15))
{
$list2[] = date('g:iA', $i);
}
}
else
{
if(in_array($single, $list2))
{
echo "<input name=start_time type='radio' disabled value='$single' />".$single; echo "<br>";
}
else
{
echo "<input name=start_time type='radio' value='$single' />".$single; echo "<br>";
}
}
}
//output
10:00AM -disabled
10:15AM -disabled
10:30AM -disabled
10:45AM -disabled
11:00AM
11:15AM -disabled
11:30AM -disabled
11:45AM -disabled
12:00PM -disabled
12:15PM
12:30PM
12:45PM
1:00PM -disabled
1:15PM -disabled
1:30PM -disabled
1:45PM -disabled
2:00PM
2:15PM
2:30PM
2:45PM
3:00PM
最後に行うタスクは、次のようにサービス期間の対象とならないタイムスロットを削除する方法です。
11:00AM (single slot b/w 2 appointment, cover only 15min)
12:15PM -
12:30PM -(3 slot b/w 2 appointment, cover only 45min)
12:45PM -