将时间更改为12小时格式

时间:2015-04-13 13:58:12

标签: php

我需要添加30分钟间隔的时间选择器。我做了一个快速搜索,并发现了以下功能,它以非常有效的方式做得很好:

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

5 个答案:

答案 0 :(得分: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>';
    }
}

答案 1 :(得分: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

答案 2 :(得分: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的修改版本。

答案 3 :(得分: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>';
    }
}

如果他们是&gt;从小时中简单地减去12 12,并设置 am / pm 如果它们仍然是&gt; 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>
...

答案 4 :(得分: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>';

虽然,还有其他方法可以做到这一点。查看剩余答案以获取更多想法。我想你会从他们那里学到更多东西。