我有一个用户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']
);
}
}
我不知道如何实现它,所以我没有其他代码。只是两个阵列 所以问题是根据可用时间和预定时间,如何找到空闲时间?
提前致谢。
答案 0 :(得分:2)
基本解决方案(可能不是最好的,但至少是一个开始)
这个想法:从工作日开始到工作日结束,制作一个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>';
这是非常基本的,没有任何检查,但我希望你可以使用它。