簡體   English   中英

將時間更改為12小時格式

[英]Change time to 12 hr format

我需要以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>';

這是使用您當前的實現,只是做了一些改動。

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

不要復雜,請使用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:ia ):

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

或24小時制( H:i ):

00:00
//...
23:30

您可以嘗試以下方法:

$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";
}

它是我以前的答案的修改版本。

我會嘗試這樣的事情:

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,則設置am / pm

結果:

...
<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>
...

根據您的代碼:

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

雖然,還有其他方法可以做到這一點。 查看其余答案以獲取更多想法。 我認為您將向他們學習更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM