我需要添加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>';
答案 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>';
虽然,还有其他方法可以做到这一点。查看剩余答案以获取更多想法。我想你会从他们那里学到更多东西。