[英]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.