2012-07-11 2 views
3

Tout ce que je veux, pour calculer les créneaux temporels liste selon mes affaires heures et bloc ou désactiver les plages horaires qui par rendez-vous réservé.Comment désactiver les créneaux horaires en fonction du temps de service?

J'ai fait ces choses avec mon problème, coincé sur la dernière tâche, mentionne ci-dessous.

My Service Duration = 60min. 
My Today Busines Hours: 
start time - 10:00 AM 
end time - 3:00 PM 

J'ai généré sous-liste de temps de 15 minutes en fonction de mes heures d'affaires aujourd'hui:

$start = strtotime('10:00 AM'); 
$end = strtotime('3:00 PM'); 
for($i = $start; $i <= $end; $i += (60*15)) 
{ 
    $slotlist[] = date('g:iA', $i); 
} 

//output 
10:00AM 
10:15AM 
10:30AM 
10:45AM 
11:00AM 
11:15AM 
11:30AM 
11:45AM 
12:00PM 
12:15PM 
12:30PM 
12:45PM 
1:00PM 
1:15PM 
1:30PM 
1:45PM 
2:00PM 
2:15PM 
2:30PM 
2:45PM 
3:00PM 

j'ai déjà réservé 3 rendez-vous

Rendez-vous | commencer à temps pour la fin des temps


Nomination-1: 10h00-11h00 (selon ma durée de service 60min)
Nomination-2: 11 heures 15-12h15
Appointment- 3: 13h00-14h00


//array of all appointment start_time 
$appointment_start_time = array('10:00AM','11:15AM','1:00PM'); 

maintenant désactiver les plages horaires qui sont déjà réservés dans les nominations

foreach($slotlist as $single) 
{ 
    if(in_array($single, $appointment_start_time)) 
    { 
     echo "<input name=start_time type='radio' disabled value='$single' />".$single; echo "<br>"; 

     $time = $single;             
     $event_length = 60-15;   // 60 is time duration        
     $timestamp = strtotime("$time");         
     $endtime = strtotime("+$event_length minutes", $timestamp);  
     $next_time = date('g:i A', $endtime);      

     //calculate between slots (start-end time) 
     $start = strtotime($single); 
     $end = strtotime($next_time); 
      for($i = $start; $i <= $end; $i += (60*15)) 
      { 
       $list2[] = date('g:iA', $i); 
      } 
    } 
    else 
    { 
     if(in_array($single, $list2)) 
     { 
      echo "<input name=start_time type='radio' disabled value='$single' />".$single; echo "<br>"; 
     } 
     else 
     { 

      echo "<input name=start_time type='radio' value='$single' />".$single; echo "<br>"; 
     } 
    } 

} 

//output 
10:00AM -disabled 
10:15AM -disabled 
10:30AM -disabled 
10:45AM -disabled 
11:00AM 
11:15AM -disabled 
11:30AM -disabled 
11:45AM -disabled 
12:00PM -disabled 
12:15PM 
12:30PM 
12:45PM 
1:00PM -disabled 
1:15PM -disabled 
1:30PM -disabled 
1:45PM -disabled 
2:00PM 
2:15PM 
2:30PM 
2:45PM 
3:00PM 

Maintenant dernière tâche à faire, comment retirer les tranches de temps qui ne sont pas admissibles service de temps de durée comme comme:

11:00AM (single slot b/w 2 appointment, cover only 15min) 

12:15PM - 
12:30PM -(3 slot b/w 2 appointment, cover only 45min) 
12:45PM - 

Répondre

2

2 jours passés, je l'ai fait cette chose soit possible

$slottimes = 15; 
$duration = 60; 
$business_start = '10:00AM'; 
$business_end = '3:00PM'; 
echo "<b>Today's Wroking Hours $business_start to $business_end</b><br>"; 
echo "<b>Calendar Slot(s) Time:</b> $slottimes<br>"; 
echo "<b>Service Duration Time:</b> $duration<br><br>"; 
$start = strtotime($business_start); 
$end = strtotime($business_end); 
/*$endtimestamp = strtotime($business_end); 
$end = strtotime("-$slottimes minutes", $endtimestamp);*/ 
    for($i = $start; $i <= $end; $i += (60*$slottimes)) 
    { 
     $slotlist[] = date('g:iA', $i); 
    } 

echo "<b>Generate Today's Available Appointment Time(s)</b><br>"; 
echo "<pre>"; print_r($slotlist); echo "</pre>"; 

echo "<b>Today's Booked Appointment(s)</b>"; 
$appstarttime = array('11:00AM', '11:15AM', '1:00PM', $business_end);   //business end-time always be in array 
$previoustime = NULL; 
$nexttime = array($business_end); 

foreach($slotlist as $single) 
{ 
    if(in_array($single, $appstarttime)) 
    { 
     //calculate next time 
     $time = $single;             
     $event_length = $duration-$slottimes;   // 60min Service duration time - 15 slot time       
     $timestamp = strtotime("$time");         
     $endtime = strtotime("+$event_length minutes", $timestamp);  
     $next_time = date('g:i A', $endtime);      

     //calculate between slots (start-end time) 
     $start = strtotime($single); 
     $end = strtotime($next_time); 
      for($i = $start; $i <= $end; $i += (60*$slottimes)) 
      { 
       $nexttime[] = date('g:iA', $i); 
      } 



     //calculate previous time 
     $time1 = $single;            
     $event_length1 = $duration-$slottimes;   // 60min Service duration time - 15 slot time        
     $timestamp1 = strtotime("$time1");        
     $endtime1 = strtotime("-$event_length1 minutes", $timestamp1); 
     $next_time1 = date('g:i A', $endtime1);       

     //calculate between slots (start-end time) 
     $start1 = strtotime($next_time1); 
     $end1 = strtotime($single); 
      for($i = $start1; $i <= $end1; $i += (60*$slottimes)) 
      { 
       $previoustime[] = date('g:iA', $i); 
      } 


    } 
} 
echo "<br>Appointment Start Time: "; 
print_r($appstarttime); 
echo "<br>"; 

echo "<br><strong>Previous Time: </strong>"; 
print_r($previoustime); 
echo "<br>"; 

echo "<br><strong>Next Time: </strong>"; 
print_r($nexttime); 
echo "<br>"; 

echo "<br><strong>Merge Both Time:</strong> "; 
if($previoustime && $nexttime) 
{ 
    $merge = array_merge($previoustime, $nexttime); 
    print_r($merge); 
} 
echo "<br>";echo "<br>"; 

$flag1 = 0; 
$flag2 = 0; 
echo "<hr><b>Today's Available Time For Appointment:</b><hr>"; 
foreach($slotlist as $single) 
{ 
    if(in_array($single, $merge)) 
    { 
     echo "<input name=start_time type='radio' disabled value='$single' />".$single; echo "<br>"; 
    } 
    else 
    { 
     echo "<input name=start_time type='radio' value='$single' />".$single; echo "<br>"; 
    } 

    if(in_array($single, $merge)) 
    { 
     $flag1 = 1; 
    } 
    else 
    { 
     $flag2 = 2; 
    } 

} 

if($flag2 != 2) 
{ echo "Sorry ! Today's all appointments has been booked."; } 

echo "<hr>"; 
0

Essayez ceci: 1.compare la première tranche de temps avec $ appointment_start_time [0], si le premier créneau horaire> $ appointment_start_time [0] -60min, désactive le créneau temporel jusqu'à $ appointment_start_time [0].

2.compare $ rendez_start_time [1] avec $ appointment_start_time [0], si durée> 2 heures (durée de service X 2), désactivez l'intervalle de temps entre $ appointment_start_time [0] et $ appointment_start_time [1 ]

3.compare $ appointment_start_time [2] avec la fin des temps, si la fin de temps 120 < $ appointment_start_time [2], a également désactivé

+1

Prenez votre temps. –

Questions connexes