2014-09-22 5 views
-1

У меня есть один пользователь 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, потому что 2-я забронированная встреча запускается 13:30:00, промежуток времени составляет 10 минут, поэтому время окончания составляет 13:20:00)

(3) 15:55:00 до 18:45:00 (такой же, как указано выше)

означает

Общее время Слот:
10:45:00 до 18:45:00

заказанное время Slot:
11:15:00 до 12:15:00
13:30:00 до 15:45:00

Free Time Slot:
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

Улыбка, вы вернулись :-) Я начинаю переименовывать – Michel

ответ

2

Basic решение (возможно, не самый лучший, но, по крайней мере, начало)

Идея: сделать массив 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

Смежные вопросы