2015-04-13 3 views
1

Мне нужно добавить селектор времени с интервалом 30 минут. Я сделал быстрый поиск и наткнулся на следующую функцию, которая делает большую работу в очень эффективным способом:Изменение времени до 12-часового формата

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>'; 

Единственная проблема заключается в том, что он выводит в следующем формате:

<option>11:00</option> 
<option>11:30</option> 
<option>12:00</option> 
<option>12:30</option> 
<option>13:00</option> 
<option>13:30</option> 

мне нужно сделайте несколько изменений. Я хотел бы сохранить значение в том же формате, но отображать его в формате 12 ч:

<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">1:00 pm</option> 
<option value="13:30">1:30 pm</option> 

Таким образом, первая часть легко, но не совсем понятно, на стороне дисплея:

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 value="'.str_pad($hours,2,'0',STR_PAD_LEFT).':'       .str_pad($mins,2,'0',STR_PAD_LEFT).'">'.str_pad($hours,2,'0',STR_PAD_LEFT).':' 
         .str_pad($mins,2,'0',STR_PAD_LEFT).'</option>'; 
+0

Как выглядит атрибут 'value'? Что-то вроде '11:30 am' и' 11:30 pm'? –

+1

На странице у вас появляется этот код: http://stackoverflow.com/questions/7941202/how-to-create-a-dropdown-of-time попробуйте код ниже принятого ответа с объектом DateTime. Этот подход позволяет настраивать формат с использованием формата '$ time-> ('H: i: s')' или того, что вы хотите, чтобы формат был – Anton

ответ

0

на основе кода:

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%12),2,'0',STR_PAD_LEFT).':' 
        .str_pad($mins,2,'0',STR_PAD_LEFT).'</option>'; 

Хотя есть другие способы сделать это. Проверьте оставшиеся ответы на другие идеи. Я думаю, вы собираетесь узнать больше от них.

0

Здесь используется ваша текущая реализация, немного измененная.

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' 

     $time = str_pad($hours,2,'0',STR_PAD_LEFT).':'.str_pad($mins,2,'0',STR_PAD_LEFT); 

     echo '<option value="'.date('h:i', strtotime($time)).'">'.date('h:i', strtotime($time)).'</option>'; 
    } 
} 
0

Не усложнять, используйте DateTime:

<?php 

    $start = new DateTime("00:00"); 
    $end = (new DateTime("00:00"))->modify("+ 1 day"); 
    $interval = new DateInterval('PT30M'); 
    $period = new DatePeriod($start, $interval, $end); 

    echo "<select>"; 
    foreach($period as $time) 
     echo "<option value='" . $time->format("H:i") . "'>" . $time->format("h:i a") . "</option>"; 
    echo "</select>"; 

?> 

Затем вы можете изменить формат, как вы хотите!

С 12-часовом формате (h:i a):

12:00 am 
//... 
11:30 pm 

ИЛИ 24 часовом формате (H:i):

00:00 
//... 
23:30 
0

Вы можете попробовать это:

$start = new DateTime('2000-01-01 00:00'); 
$end  = new DateTime('2000-01-02 00:00'); 
$interval = DateInterval::createFromDateString('+30 minutes'); 
$period = new DatePeriod($start, $interval, $end); 
foreach ($period as $time) { 
    echo $time->format("H:ia") . "<br>\n"; 
} 

Это модифицированная версия previous answer of mine.

0

Я хотел бы попробовать что-то вроде этого:

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' 
     $hours = str_pad($hours, 2, '0', STR_PAD_LEFT); 
     $mins = str_pad($mins, 2, '0', STR_PAD_LEFT); 
     $twelve_hours = ($hours > 12) ? $hours - 12 : $hours; 
     $am_pm = ($hours > 12) ? "pm" : "am"; 
     echo '<option value="'.$hours.":".$mins.'">'.$twelve_hours.":".$mins." ".$am_pm.'</option>'; 
    } 
} 

Просто отнимите 12 от часов, если они> 12, и установить утра/вечера, если они все еще> 12

Результат:

... 
<option value="12:00">12:00 am</option> 
<option value="12:30">12:30 am</option> 
<option value="13:00">1:00 pm</option> 
<option value="14:00">2:00 pm</option> 
<option value="14:30">2:30 pm</option> 
...