2014-09-22 48 views
-1

我有一個用戶A.用戶A可用於10:45:00至18:45:00。意味着他可以在那段時間接受約會。如何根據可用時間段和預定時間段查找空閒時間段?

如此假設,用戶A有兩個登記的預約:
(1)11時15分00秒到12點15分00秒和
(2)13時三十零分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(2)開始時間= 12:25:00因爲第一次預約約會在12:15:00完成,所以結束時間爲12:25:00之間有10分鐘的差距,結束時間= 13:20:00因爲第二次預約了約會於13:30:00開始,時間間隔爲10分鐘,因此結束時間爲13:20:00)

(3)15點55分00秒到十八點45分00秒(同上)

裝置

總時隙:
10點45分00秒到十八點45分00秒

預訂時間段:
11:15:00至十二時15分00秒
13:30:00至15:45:00

空閒時隙:
10:45:00至11: 05:00
12:25:00至十三時20分00秒
15時55分00秒至18時45分零零秒

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

咧嘴笑,你回來了:-)我開始重新鍵入 – Michel 2014-09-22 13:38:44

回答

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>'; 

這是非常基本的,沒有任何檢查,但我希望你可以使用它。

+0

感謝@Michel爲您的答案。我會查一下。 – DS9 2014-09-22 14:12:26