在CakePHP中形成帮助者“输入日期”错误?

时间:2011-05-30 09:14:16

标签: cakephp date formhelper

我在cakephp中使用了formhelper

   echo $this->Form->input('birth_dt', array( 'label' => 'Date of birth'));

我发现2月份的那天是“31”...... 这是一个错误吗?因为没有2月31日那样的东西

3 个答案:

答案 0 :(得分:1)

就像JohnP所说,它不会根据月份值更改下拉列表。我的意思是 - 您可以在项目中使用FormHelper而不使用任何Javascript - 那么它怎么会这样做呢?

但这将是一个相当酷的功能。使用jQuery或其他任何东西,您可以收听月份和年份下拉菜单,并根据月/年值更改日期下拉菜单的选项。 cal_days_in_month()。不太难做,我想它可以作为FormHelper的附加功能包含在Cake 2.0中。如果你有JsHelper,你可以使用它。

好吧,只是因为我有点无聊,我写了这段jQuery代码:

<script type="text/javascript">
$().ready(function()
  {
  $('#ModelFieldMonth, #ModelFieldYear').change(function()
    {
    var day = $('#ModelFieldDay').val();
    var month = $('#ModelFieldMonth').val();
    var year = $('#ModelFieldYear').val();

    var days_in_month = new Array();
    days_in_month['01'] = 31; days_in_month['02'] = 28; days_in_month['03'] = 31; days_in_month['04'] = 30; days_in_month['05'] = 31; days_in_month['06'] = 30;
    days_in_month['07'] = 31; days_in_month['08'] = 31; days_in_month['09'] = 30; days_in_month['10'] = 31; days_in_month['11'] = 30; days_in_month['12'] = 31;
    if (year % 4 == 0) { days_in_month['02'] = 29; } // if leap year

    $('#ModelFieldDay').find('option').remove();
    var i = 0;
    for (i = 1; i <= days_in_month[month]; i++)
      {
      $('#ModelFieldDay').append('<option value="'+i+'">'+i+'</option>')
      }
    $('#ModelFieldDay').val(day);
    });
  });
</script>

答案 1 :(得分:0)

你在谈论下拉对吗?好吧,4月31日也没有这样的事情:)

下拉列表只会生成给定范围的所有适用日期的列表。它不会更改取决于所选月份的值。所以不,这不是一个错误。

答案 2 :(得分:0)

就像其他人所说的那样,下拉列表是静态的,而不是月份特定的。您应该在使用之前验证日期,因此您只需添加验证规则即可告知用户是否选择了无效组合。