Я хочу создать выпадающее меню для времени в PHP. Он должен быть 24-часовой формат с интервалом в 30 минут, как 00:00
затем 00:30
затем 13:00
и так далее. Я хочу его круглосуточно.
Я использовал этот код
<?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>
Проблема в том, что он не охватывает последний промежуток с 11:30 до 12:00 AM, поскольку значение приращения превышает конечный результат. Есть ли прямой способ сделать это в PHP?
Нм, крайне маловероятно, что в будущем наши часы внезапно получат 25-й час, поэтому нормальный цикл должен делать хорошо:
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>';
Почему бы не использовать объект DateTime, специально предназначенный для такого типа вещей?
$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);
по$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);
$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); }
Вам не нужно будет переписывать каждый раз, когда вам нужно создать список времени, если вы создадите свою собственную функцию.
/** * * 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( 'hi A', $current ) .'</option>'; $current = strtotime( $interval, $current ); } return $output; }
Получите время:
<select name="time"><?php echo get_times(); ?></select>
Вот результат:
<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>
для joomla 2. * пользователь
<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>
Сначала конвертируйте свое время в часы, а затем, используя цикл, вы можете сгенерировать список времени, как вы хотите.
$s_temp = new DateTime('17:00'); $stime = $s_temp->format('H'); $e_temp = new DateTime('03:30'); $etime = $e_temp->format('H'); $data = array();
если время начала <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'; } } }
если время начала> 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;