如何使时间下拉框默认为当前时间



我有一个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>
<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";
?>

下面是获取当前时间上下四舍五入的方便方法:

$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。

Edit:根据下面的注释,有一个条件将失败,因为舍入时间导致滚动到第二天。要修复它,将$selected行修改为:

$selected = ( ($rounded_time - $i) % (86400) == 0) ? ' selected="selected"' : '';

忽略日期部分,只检查时间。我已经更新了下面的演示以反映这个变化。

演示

相关内容

  • 没有找到相关文章

最新更新