我有一个用于选择下拉框的PHP脚本,以15分钟的间隔显示时间;但是,我希望它默认为最接近的当前时间(基于15分钟间隔向上或向下舍入)。有什么想法吗?
date_default_timezone_set($_SESSION['TIME_ZONE'])
<label id="time_label" for="time" class="label">Time:</label>
<select id="time" name="time">
<option value="">Select</option>
<?
$start = strtotime('12:00am');
$end = strtotime('11:59pm');
for ($i = $start; $i <= $end; $i += 900){
echo '<option>' . date('g:i a', $i);
}
?>
</select>
答案 0 :(得分:3)
<label id="time_label" for="time" class="label">Time:</label>
<select id="time" name="time">
<option value="">Select</option>
<?php
$start = strtotime('12:00am');
$end = strtotime('11:59pm');
$now = strtotime('now');
$nowPart = $now % 900;
if ( $nowPart >= 450) {
$nearestToNow = $now - $nowPart + 900;
if ($nearestToNow > $end) { // bounds check
$nearestToNow = $start;
}
} else {
$nearestToNow = $now - $nowPart;
}
for ($i = $start; $i <= $end; $i += 900){
$selected = '';
if ($nearestToNow == $i) {
$selected = ' selected="selected"';
}
echo "\t<option" . $selected . '>' . date('g:i a', $i) . "\n";
}
?>
</select>
这里有一些调试代码:
<?php
echo '<p></p>DEBUG $now = '. date('Y-m-d g:ia', $now) . "<br />\n";
echo "DEBUG \$nowPart = $nowPart<br />\n";
echo 'DEBUG $nearestToNow = '. date('Y-m-d g:ia', $nearestToNow) . "<br />\n";
?>
答案 1 :(得分:2)
以下是将当前时间向上或向下舍入的便捷方式:
$time = time();
$rounded_time = $time % 900 > 450 ? $time += (900 - $time % 900): $time -= $time % 900;
$start = strtotime('12:00am');
$end = strtotime('11:59pm');
for( $i = $start; $i <= $end; $i += 900)
{
$selected = ( $rounded_time == $i) ? ' selected="selected"' : '';
echo '<option' . $selected . '>' . date('g:i a', $i) . '</option>';
}
您可以使用以下演示进行测试,只需向$time
变量添加450或900即可。
编辑:根据以下评论,有一个条件会失败,因为向上舍入的时间会导致到第二天的翻转。要解决此问题,请将$selected
行修改为:
$selected = ( ($rounded_time - $i) % (86400) == 0) ? ' selected="selected"' : '';
这会忽略日期部分,只是检查时间。我已更新以下演示以反映此更改。