increment time with for looping

Discussion in 'PHP' started by assgar, Jul 21, 2007.

  1. #1
    increment time with for looping

    Hi

    I am not sure I am approaching this correctly.

    I need to increment the appointment time by 15 mins for each loop.

    This is would be the correct result:
    13:00, 13:15, 13:30, 13:45, 14:00,

    This is what I am getting:
    13:15, 13:15, 13:15, 13:15, 13:15

    The user selects the first appointment example 13:00:00 hrs (HH:MM)
    and one or more time blocks. Time blocks range from 1 to 10. Each is 0.15 mins (H).

    $event_time = 13:00;//start time
    $time_block = 5;// number of loops
    $event_length = 0.15;//start time increment by



    
    <?php
    
    /**--------------------------insert appointment in database--------------------------**/
    //loop the number of time blocks
    for($i = 0; $i < $time_block; $i++)
    	{
    					
    					
               /**---------------------calculate total duration---------------------**/
     	   //Note: event time length * time_block = total event duration
    	   //split event time
     	   list($event_hour, $event_min) = explode(".",$event_time);
    	 					
    	   //event length
    	   list($length_hour, $length_min) = explode(".",$event_length);
    	 					
    	   //convert event time to minutes
     	   $event_minutes = ($event_hour * 60) + $event_min;
     						
     	   //convert event time length to minutes
     	   $length_minutes = (length_hour * 60) + $length_min;
    
     	
     	  //add event time to event duration = next event time
     	  $total_min = $event_minutes + $length_minutes++;
    	  
    	  //convert minutes to hours and minutes
    	  if($total_min < 0)
    	        {
    	            $min =Abs($total_min);
    		}
    		else
    	 	   {
    			$min = $total_min;
    		   }
    	  $H = Floor($min/60);
    	  $M = ($min - ($H * 60))/100;
    	  $hours = $H + $M;
    	 
    	  if($total_min < 0) 
    	 	{
    	 	   $hours = $hours * (-1);
    		}
    	 
    	 $expl = explode(".",$hours);
    	 $H = $expl[0];
    	  
    	 if(empty($expl[1])) 
    	    {
    	 	$expl[1] = 00;
    	    } 
    	 
    	 $M = $expl[1];
    	 if(strlen($M) < 2)
    	    {
    		$M = $M . 0;
    	    }
    	 
        	$new_event_time = $H.".".$M;//total duration
    				
    	
    	
    	/**-------------------database insert statement goes here ------------------**/
    				
       }
    <?
    
    PHP:
     
    assgar, Jul 21, 2007 IP
  2. Greg Carnegie

    Greg Carnegie Peon

    Messages:
    385
    Likes Received:
    13
    Best Answers:
    0
    Trophy Points:
    0
    #2
    Shouldn't you use ":" instead "." here:
    
    //Note: event time length * time_block = total event duration
    //split event time
    list($event_hour, $event_min) = explode(".",$event_time);
    
    PHP:
    You lost also $ here:
    
    $length_minutes = (length_hour * 60) + $length_min;
    
    PHP:
    Don't know if these helps, but it's a start ;)
     
    Greg Carnegie, Jul 21, 2007 IP
  3. assgar

    assgar Peon

    Messages:
    50
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #3
    Hi

    Thanks for the response.

    This is the solution:


    
    $event_time = "13:00"; 
    $time_block = 5; 
    $event_length = 15; // minutes 
    
    for($i = 0, $eTime = strtotime($event_time); 
        $i < $time_block; 
        $i++, $eTime = strtotime("+$event_length minutes", $eTime)) 
    { 
       $new_event_time = date('H:i', $eTime); 
       echo "<p>$new_event_time</p>\n"; 
    }
    
    PHP:
     
    assgar, Jul 21, 2007 IP