使用minYear/maxYear参数的CakePHP 2.x问题

使用minYear/maxYear参数的CakePHP 2.x问题,php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,我在Windows 7 32位上使用CakePHP V.2.3.4,我尝试使用maxYear和minYear参数,但我没有得到正确的值,我使用的代码是下一个: echo $this->Form->input( 'date_birth', array( 'dateFormat'=>'DMY', 'minYear'=>date('Y')-100, 'maxYear'=>date('Y')-18 ) ))

我在Windows 7 32位上使用CakePHP V.2.3.4,我尝试使用
maxYear
minYear
参数,但我没有得到正确的值,我使用的代码是下一个:

echo $this->Form->input(
    'date_birth',
    array(
        'dateFormat'=>'DMY',
        'minYear'=>date('Y')-100,
        'maxYear'=>date('Y')-18
)
))

cake显示的值为:最小年份:1913,最大年份:2013
正确的值应为:最小年份:1913,最大年份:1995

我还试着说:

echo $this->Form->input(
    'date_birth',
    array(
        'dateFormat'=>'DMY',
        'maxYear'=>date('Y')-18
    )
);
但结果是不正确的:从1993年到2013年


请帮助我。

根据cakephp文档

你可以试试下面的代码

echo $this->Form->input('date_birth', array(
    'label' => 'Date of birth',
    'dateFormat' => 'DMY',
    'minYear' => date('Y') - 70,
    'maxYear' => date('Y') - 18,
));

我想它肯定会对您有用。

我刚刚使用了当前的主分支(2.3.5)并使用了您的代码片段

$result = $this->Form->input('date_of_birth', array(
    'dateFormat' => 'DMY',
    'minYear' => date('Y') - 100,
    'maxYear' => date('Y') - 18));
得到:

<div class="input text">
    <label for="date_of_birth">Date Of Birth</label>
    <input name="data[date_of_birth]" dateFormat="DMY" minYear="1913" maxYear="1995" type="text" id="date_of_birth"/>
</div>

出生日期
我不知道你在干什么。但看起来这肯定不是蛋糕的错


请注意,从2.3.4开始,如果您将超出此范围的一年作为预选值/默认值传入,则该值范围将自动预期,如注释中所述。

我最终使其按如下方式工作:

<?php echo $this->Form->input('date_birth', array('type'=>'date',
    'label' => 'Date of birth',
    'dateFormat' => 'DMY',
    'empty' => true,
    'minYear' => date('Y')-100,
    'maxYear' =>date('Y')-18,
    )
    );
?>


请注意,解决方案是添加:
'empty'=>true

我发现向输入添加默认值可以纠正此问题;本质上,CakePHP会将日期条目默认为当前日期,而且如果您尝试将maxYear设置为比默认值早的值,它会忽略maxYear以支持默认值

因此:


你试过最新的2.3.5版本吗?最近在这方面有一些错误修复。也许最新的主分支不再有这个问题了?您使用的是什么版本的PHP?什么是变量转储(日期('Y',标准时间('-100年))输出?@标记i更新蛋糕到最长2.3.5,结果相同。@ xGalvin PHP是5.4.14MVC9(Visual C++ 2008)x86,Apache/2.4.4(Win32)PHP/5.4.14.<代码>变量转储(日期('Y',标准时间('-100年)):string(4)“1913”测试用例应该显示它按预期工作()。但可能存在缺陷或缺少测试。你能在测试中重现问题吗?
echo $this->Form->input(
    'dob',
    array(
        'type' => 'date',
        'selected' => array(
            'year'=>date('Y')-18
        ),
        'minYear' => date('Y') - 100,
        'maxYear' => date('Y') - 18
    )
);