我目前有一个选择列表,其中填充了这样的选项
for($hours=0; $hours<24; $hours++) // the interval for hours is '1'
for($mins=0; $mins<60; $mins+=15) // 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>';
目前填充
12:15
12:30
12:45
13:00
13:15
13:30
13:45
14:00
14:15
完成24小时递增15分钟的工作但是我需要用AM / PM将其改为12小时。我不知道如何做到这一点。
所以我的结果应该是这样的
11:30 AM
11:45 AM
12:00 PM
12:15 PM
12:30 PM
12:45 PM
01:00 PM
01:15 PM...
答案 0 :(得分:3)
懒惰的解决方案是检查小时值并使用条件在适当时减去12以及在AM / PM之间切换。当然,你需要另一个条件来处理12而不是00的特殊情况。虽然这样可行,但它并不是特别优雅。
我建议的替代方案是在几秒钟内构建一个15分钟增量的数组,然后使用date()
格式化输出。
示例:
// 15 mins = 900 seconds.
$increment = 900;
// All possible 15 minute periods in a day up to 23:45.
$day_in_increments = range( 0, (86400 - $increment), $increment );
// Output as options.
array_walk( $day_in_increments, function( $time ) {
printf( '<option>%s</option>', date( 'g:i A', $time ) );
} );
答案 1 :(得分:0)
如果$a
大于12,您可以使用变量$hours
存储AM / PM文本并将其打印出来。
for($hours=0; $hours<24; $hours++) // the interval for hours is '1'
{
// add this line
if($hours<12) $a = 'AM' else {$a = 'PM'; $hours-=12;}
for($mins=0; $mins<60; $mins+=15) // the interval for mins is '30'
echo '<option>'.str_pad($hours,2,'0',STR_PAD_LEFT).':'
// and add this variable $a in the end of the line
.str_pad($mins,2,'0',STR_PAD_LEFT).$a.'</option>';
}
答案 2 :(得分:0)
尝试一下。
$start = '11:15';
$end = '24:15';
$tStart = strtotime($start);
$tEnd = strtotime($end);
$tNow = $tStart;
while ($tNow <= $tEnd) {
echo '<option>' . date('h:i A', $tNow) . "</option>";
$tNow = strtotime('+15 minutes', $tNow);
}
<强> DEMO 强>