如何根据可用时隙和预订时隙查找空闲时隙?

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 的回答。我会检查的。

以上是关于如何根据可用时隙和预订时隙查找空闲时隙?的主要内容,如果未能解决你的问题,请参考以下文章

将新时隙添加到时隙表

Javascript - 通过删除服务持续时间来处理时隙

FlexRay通信机制

时隙是啥?

2 个不同 QML 之间的 QML 信号和时隙

赛事安排问题