此脚本判断60分钟的时段是否在某个时间范围内可用,同时考虑到已预订的时段. 它适用于第一个已预订的空位,但不考虑第二个空位.此外,如果我将第一个预订的时段更改为12:10,它也不会检测到它.
基本上,我们的 idea 是,如果在射程和已经预订的时段之间有60分钟的时段来展示它.
For example,,如果我们的范围是9:00
到15:00
,并且我们从11:10
和14:00
有两个预订的时隙,则返回9:00, 10:00 and 12:10
中的可用时隙
$start_time = '2022-10-21 09:00:00'; //start time as string
$end_time = '2022-10-21 15:00:00'; //end time as string
$booked = ['2022-10-21 12:00:00','2022-10-21 13:00:00']; //booked slots as arrays
$start = DateTime::createFromFormat('Y-m-d H:i:s',$start_time); //create date time objects
$end = DateTime::createFromFormat('Y-m-d H:i:s',$end_time); //create date time objects
$time1 = $start;
$count = 0; //number of slots
$out = array(); //array of slots
for($i = $start; $i<$end;) //for loop
{
$avoid = false;
$t1 = date_timestamp_get($i);
$t2 = $t1+(60*60);
for($k=0;$k<sizeof($booked);$k+=2) //if booked hour
{
$st = DateTime::createFromFormat('Y-m-d H:i:s',$booked[$k]);
$en = DateTime::createFromFormat('Y-m-d H:i:s',$booked[$k+1]);
if( $t1 >= date_timestamp_get($st) && $t2 <= date_timestamp_get($en) )
$avoid = true; //yes. booked
}
$slots =[ $i->format('H:i'),$i->modify("+60 minutes")->format('H:i')];
if(!$avoid && $i<$end) //if not booked and less than end time
{
$count++;
array_push($out,$slots); //add slot to array
}
}
var_dump($out); //array out
Here is link to sandbox. https://onlinephp.io/c/b0b77.
Additional information个
假设我们有一个从10:00 until 13:00
开始的空闲时间框架.如果时间段是60 min
,则脚本应返回10:00
、11:00
和12:00
作为可能性.
如果时隙是45 min
.例如,它应该返回10:00
、10:45
、11:30
和12:15
.
因此,可能的变型应该从随着时隙(45, 60, or whatever time slot is set
)增加的第一个可能选项开始
插槽不能从10:12, 10:44, or another custom time
开始
The Solutions个
下面的Salman A
和Jim
两个解决方案都像预期的那样工作.只是使用一点不同的方法.