使用上午/下午12小时选择列表增量时间15分钟

时间:2017-05-20 06:09:41

标签: php

我目前有一个选择列表,其中填充了这样的选项

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

3 个答案:

答案 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 ) );
} );

http://php.net/manual/en/function.date.php

答案 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