如何根据可用时隙和预订时隙查找空闲时隙?
Posted
技术标签:
【中文标题】如何根据可用时隙和预订时隙查找空闲时隙?【英文标题】:How to find free time slot based on available time slot and booked time slot? 【发布时间】:2014-09-22 13:22:15 【问题描述】:我有一个用户 A。用户 A 的可用时间为 10:45:00 到 18:45:00。表示他可以在那段时间接受预约。
假设,用户 A 有两个预约: (1) 11:15:00 至 12:15:00 和 (2) 13:30:00 至 15:45:00
两次预约之间至少有 10 分钟的间隔。
所以现在用户A的空闲时间是:
(1) 10:45:00 到 11:05:00(开始时间 = 10:45:00,结束时间 = 11:05:00,因为用户 A 已预订了从 11:15:00 开始的约会, 时间间隔 10 分钟,所以结束时间是 11:05:00)
(2) 12:25:00 到 13:20:00(开始时间 = 12:25:00,因为第一次预约在 12:15:00 结束,时间间隔 10 分钟,所以结束时间是12:25:00,结束时间 = 13:20:00,因为第二次预约是在 13:30:00 开始的,时间间隔为 10 分钟,所以结束时间是 13:20:00)
(3) 15:55:00至18:45:00(同上)
表示
总时隙: 10:45:00 至 18:45:00
预定时段: 11:15:00 至 12:15:00 13:30:00 至 15:45:00
空闲时间: 10:45:00 至 11:05:00 12:25:00 至 13:20:00 15:55:00 至 18:45:00
php CODE
:
$total_time = array(
'time' => '11:15:00',
'end_time' => '12:15:00'
);
$gettime = $this->db->query("select `appointment_id`, `time`, `end_time` from `tbl_appointment` where `date`='".$json['date']."'");
if($gettime->num_rows()>0)
foreach($gettime->result_array() as $restime)
$booked_time[] = array(
'time' => $restime['time'],
'end_time' => $restime['end_time']
);
我不知道如何实现它,所以我没有其他代码。只有两个数组。 那么问题是根据可用时间和预订时间,如何找到空闲时间?
提前致谢。
【问题讨论】:
咧嘴一笑,你回来了 :-) 我开始重新输入 【参考方案1】:基本解决方案(也许不是最好的,但至少是一个开始)
想法:从工作日开始到工作日结束,制作一组 5 分钟的区块。填写0
。每次预约时,以5分钟为单位,以1
的形式放入数组中。现在您知道每个区块是否有空。
//working hours
$start='10:45:00';
$end='18:45:00';
$start=strtotime($start);
$end=strtotime($end);
//end-start divided by 300 sec to create a 5 min block
$timesegments=($end-$start)/300;
//create the blocks-array
$blocks=array_fill_keys(range(0,$timesegments,5),0);
//an appointment
$app_start='10:45:00';
$app_end='11:00:00';
//make 5 minute blocks (note that workday start is 0!)
$app_start=(strtotime($app_start)-$start)/300;
$app_end=(strtotime($app_end)-$start)/300;
//put it in the blocks-array (+2 for 10 minute break)
for($i=$app_start;$i<$app_end+2;++$i)
$blocks[$i]=1;
echo '<pre>'.print_r($blocks,true).'</pre>';
这是非常基本的,没有任何检查,但我希望你可以使用它。
【讨论】:
感谢@Michel 的回答。我会检查的。以上是关于如何根据可用时隙和预订时隙查找空闲时隙?的主要内容,如果未能解决你的问题,请参考以下文章