techie_28
techie_28

Reputation: 2133

How to create a dropdown of time?

I want to create a dropdown for time in PHP. It should be of 24 hour format with an interval of 30 minutes like 00:00 then 00:30 then 13:00 and so on.I want it round the clock.

I have used this code

<?php 
    $start = strtotime('12:00 AM');
    $end   = strtotime('11:59 PM');
?>
<select style="width:85px;" name="select1" id="select1">
    <?php for($i = $start;$i<=$end;$i+=1800){ ?>  
        <option value='<?php echo date('G:i', $i); ?>'><?php echo date('G:i', $i); ?></option>;
    <?php } ?>
</select>

The problem is that it doesn't cover the last span of 11:30 to 12:00 AM as the increment value exceeds the end, Is there a direct way to do this in PHP?

Upvotes: 11

Views: 61648

Answers (7)

Robert Lattery
Robert Lattery

Reputation: 53

Variation of Christian's answer using AM and PM:

for ($hours=0; $hours<24; $hours++) { // the interval for hours is '1'
  for($mins=0; $mins<60; $mins+=30) { // the interval for mins is '30'
    $thehour = str_pad($hours,2,'0',STR_PAD_LEFT);
    if ($thehour == "00") {
      $thehour = "12";
    }
    if ($thehour > "12") {
      $thehour = $thehour - 12;
      if ($thehour < 10) {
        $thehour = "0" . $thehour;  
      }
    }
    $theminutes = str_pad($mins,2,'0',STR_PAD_LEFT);
    $mytime = $thehour.":".$theminutes;
    if ($hours < 12) {
      $mytime = $mytime . " AM";    
    }
    else {
      $mytime = $mytime . " PM";
    }
    echo "<option>".$mytime."</option>";
  } 
}

Upvotes: 0

kuzey beytar
kuzey beytar

Reputation: 3227

You could use that function to create time list anywhere on your page:

/**
 *
 * Get times as option-list.
 *
 * @return string List of times
 */
function get_times ($default = '19:00', $interval = '+30 minutes') {

    $output = '';

    $current = strtotime('00:00');
    $end = strtotime('23:59');

    while ($current <= $end) {
        $time = date('H:i', $current);
        $sel = ($time == $default) ? ' selected' : '';

        $output .= "<option value=\"{$time}\"{$sel}>" . date('h.i A', $current) .'</option>';
        $current = strtotime($interval, $current);
    }

    return $output;
}

Get times:

<select name="time"><?php echo get_times(); ?></select>

Here is the result:

<select name="time">
    <option value="00:00">12.00 AM</option>
    <option value="00:30">12.30 AM</option>
    <option value="01:00">01.00 AM</option>
    <option value="01:30">01.30 AM</option>
    <option value="02:00">02.00 AM</option>
    <option value="02:30">02.30 AM</option>
    <option value="03:00">03.00 AM</option>
    <option value="03:30">03.30 AM</option>
    <option value="04:00">04.00 AM</option>
    <option value="04:30">04.30 AM</option>
    <option value="05:00">05.00 AM</option>
    <option value="05:30">05.30 AM</option>
    <option value="06:00">06.00 AM</option>
    <option value="06:30">06.30 AM</option>
    <option value="07:00">07.00 AM</option>
    <option value="07:30">07.30 AM</option>
    <option value="08:00">08.00 AM</option>
    <option value="08:30">08.30 AM</option>
    <option value="09:00">09.00 AM</option>
    <option value="09:30">09.30 AM</option>
    <option value="10:00">10.00 AM</option>
    <option value="10:30">10.30 AM</option>
    <option value="11:00">11.00 AM</option>
    <option value="11:30">11.30 AM</option>
    <option value="12:00">12.00 PM</option>
    <option value="12:30">12.30 PM</option>
    <option value="13:00">01.00 PM</option>
    <option value="13:30">01.30 PM</option>
    <option value="14:00">02.00 PM</option>
    <option value="14:30">02.30 PM</option>
    <option value="15:00">03.00 PM</option>
    <option value="15:30">03.30 PM</option>
    <option value="16:00">04.00 PM</option>
    <option value="16:30">04.30 PM</option>
    <option value="17:00">05.00 PM</option>
    <option value="17:30">05.30 PM</option>
    <option value="18:00">06.00 PM</option>
    <option value="18:30">06.30 PM</option>
    <option value="19:00" selected="">07.00 PM</option>
    <option value="19:30">07.30 PM</option>
    <option value="20:00">08.00 PM</option>
    <option value="20:30">08.30 PM</option>
    <option value="21:00">09.00 PM</option>
    <option value="21:30">09.30 PM</option>
    <option value="22:00">10.00 PM</option>
    <option value="22:30">10.30 PM</option>
    <option value="23:00">11.00 PM</option>
    <option value="23:30">11.30 PM</option>
</select>

Upvotes: 20

Rizwan Mughal
Rizwan Mughal

Reputation: 17

Convert your time into hours first and then by using for loop you can generate the list of time like you want.

$s_temp = new DateTime('17:00');
$stime = $s_temp->format('H');

$e_temp = new DateTime('03:30');
$etime = $e_temp->format('H');

$data = array();

if starting time is < 12

if($stime < 12){
 for($hours=$stime; $hours<12; $hours++){
  for($mins=0; $mins<60; $mins+=30){
   $data[] = str_pad($hours,2,'0',STR_PAD_LEFT).':'.str_pad($mins,2,'0',STR_PAD_LEFT).' am';
  }
 }
 for($hours=0; $hours<=$etime; $hours++){
  for($mins=0; $mins<60; $mins+=30){
   $data[] = str_pad($hours,2,'0',STR_PAD_LEFT).':'.str_pad($mins,2,'0',STR_PAD_LEFT).' pm';
  }
 }
}

if starting time is > 12

if($stime > 12){
 for($hours=$stime; $hours<24; $hours++){
  for($mins=0; $mins<60; $mins+=30){
   $data[] = str_pad($hours,2,'0',STR_PAD_LEFT).':'.str_pad($mins,2,'0',STR_PAD_LEFT).' pm';
  }
 }
 for($hours=0; $hours<=$etime; $hours++){
  for($mins=0; $mins<60; $mins+=30){
   $data[] = str_pad($hours,2,'0',STR_PAD_LEFT).':'.str_pad($mins,2,'0',STR_PAD_LEFT).' am';
  }
 }
}

return $data;

Upvotes: 0

surinder singh
surinder singh

Reputation: 1555

for joomla 2.* user

<field
        name="time"
        type="list"
        required="true"
        label="Time"
        description="Time"
        class="input-medium validate-time"
    >   

        <option value="00:00:00">00:00</option>      
        <option value="00:30:00">00:30</option>      
        <option value="01:00:00">01:00</option>     
        <option value="01:30:00">01:30</option>      
        <option value="02:00:00">02:00</option>      
        <option value="02:30:00">02:30</option>      
        <option value="03:00:00">03:00</option>      
        <option value="03:30:00">03:30</option>      
        <option value="04:00:00">04:00</option>      
        <option value="04:30:00">04:30</option>      
        <option value="05:00:00">05:00</option>      
        <option value="05:30:00">05:30</option>      
        <option value="06:00:00">06:00</option>      
        <option value="06:30:00">06:30</option>     
        <option value="07:00:00">07:00</option>      
        <option value="07:30:00">07:30</option>      
        <option value="08:00:00">08:00</option>      
        <option value="08:30:00">08:30</option>      
        <option value="09:00:00">09:00</option>      
        <option value="09:30:00">09:30</option>      
        <option value="10:00:00">10:00</option>      
        <option value="10:30:00">10:30</option>      
        <option value="11:00:00">11:00</option>      
        <option value="11:30:00">11:30</option>      
        <option value="12:00:00">12:00</option>      
        <option value="12:30:00">12:30</option>      
        <option value="13:00:00">13:00</option>      
        <option value="13:30:00">13:30</option>      
        <option value="14:00:00">14:00</option>      
        <option value="14:30:00">14:30</option>      
        <option value="15:00:00">15:00</option>      
        <option value="15:30:00">15:30</option>      
        <option value="16:00:00">16:00</option>      
        <option value="16:30:00">16:30</option>      
        <option value="17:00:00">17:00</option>      
        <option value="17:30:00">17:30</option>      
        <option value="18:00:00">18:00</option>      
        <option value="18:30:00">18:30</option>      
        <option value="19:00:00">19:00</option>      
        <option value="19:30:00">19:30</option>      
        <option value="20:00:00">20:00</option>      
        <option value="20:30:00">20:30</option>      
        <option value="21:00:00">21:00</option>      
        <option value="21:30:00">21:30</option>      
        <option value="22:00:00">22:00</option>      
        <option value="22:30:00">22:30</option>      
        <option value="23:00:00">23:00</option>      
        <option value="23:30:00">23:30</option>
    </field>

Upvotes: 0

Samir Patel
Samir Patel

Reputation: 895

$hoursArray = range(0, 12);
$minutesArray = range(0, 60);
$amPmArray = array('AM', 'PM');

//Pad the min and hr fields with a leading zero
array_walk($hoursArray, 'padLeadingZero');
array_walk($minutesArray, 'padLeadingZero');

/**
* Pad give input with a leading 0
* @param int $val Value that needs to be padded with a leading 0
*/
function padLeadingZero(&$val){
    $val = str_pad($val, $padLength = 2, $padString = '0', $padType = STR_PAD_LEFT);
}

Upvotes: 1

dqhendricks
dqhendricks

Reputation: 19251

Why not use the DateTime object which is specifically designed for this type of thing?

$starttime = '00:00:00';
$time = new DateTime($starttime);
$interval = new DateInterval('PT30M');
$temptime = $time->format('H:i:s');

do {
   echo $temptime . '<br />';
   $time->add($interval);
   $temptime = $time->format('H:i:s');
} while ($temptime !== $starttime);

Upvotes: 3

Christian
Christian

Reputation: 28125

Uhm, it is extremely unlikely that in the future, our clocks suddenly gain a 25th hour, so a normal loop should do fine:

for($hours=0; $hours<24; $hours++) // the interval for hours is '1'
    for($mins=0; $mins<60; $mins+=30) // the interval for mins is '30'
        echo '<option>'.str_pad($hours,2,'0',STR_PAD_LEFT).':'
                       .str_pad($mins,2,'0',STR_PAD_LEFT).'</option>';

Upvotes: 42

Related Questions