在我的应用程序中,预计以下内容将输出 12 小时时间的小时、分钟和子午线<select>
,默认选择下午 4:30:
echo $this->Form->input('time_example', array(
'interval' => 5,
'timeFormat' => '12',
'type' => 'time',
'selected' => array(
'hour' => '4',
'min' => '30',
'meridian' => 'pm'
)
));
但默认选择的时间实际上显示为凌晨 4:30。
经过一番摆弄,我发现如果从选项中删除它将正确默认为下午 4:30,如果interval
从选项中删除它将正确默认为下午 4:00 min
。
我深入研究了 FormHelper.php 并在 FormHelper::dateTime() 中找到了这个,从第 2246 行开始(在 CakePHP 版本 2.2.3 中):
if (!empty($interval) && $interval > 1 && !empty($min)) {
$current = new DateTime();
if ($year !== null) {
$current->setDate($year, $month, $day);
}
if ($hour !== null) {
$current->setTime($hour, $min);
}
$change = (round($min * (1 / $interval)) * $interval) - $min;
$current->modify($change > 0 ? "+$change minutes" : "$change minutes");
$newTime = explode(' ', $current->format('Y m d H i a'));
list($year, $month, $day, $hour, $min, $meridian) = $newTime;
}
这看起来如果同时设置$interval
和$min
,这可以防止$min
与 冲突$interval
,但会被24 小时格式的假设$meridian
覆盖。这会强制任何小于 12 的值变为“am” ,从而无法默认选择下午 4:30。$hour
$meridian
$hour
我是否错误地使用了帮助程序,或者这是核心错误?