对于Zend表单,如何在输入开始日期时将结束日期更新为自动在开始日期之后一天


For a Zend form, how can I update the end date to automatically be one day after the start date when a start date is entered?

在表单中有一个开始日期元素和一个结束日期元素。每个都是使用日期选择器选择的。我想让我的表单自动将结束日期元素设置为选择开始日期的第二天(因此,例如,如果我选择2013年7月10日,结束日期字段中的值应该默认为2013年7月11日)。从那时起,用户可以随意设定结束日期,但最初的结束日期应该是第二天。

下面是我的代码的形式:
    // Element: start_date
    $start_date = new Zend_Form_Element_Text('start_date',
        array(
             'label' => 'Start date',
             'required' => false,
             'filters' => array('StringTrim', 'StripTags'),
             'class' => 'input-small datepicker',
             'decorators' => $customElementDecorators,
             'data-date' => date("Y-m-d"),
             'data-date-format' => 'yyyy-mm-dd',
             'value' => date("Y-m-d")
        )
    );
    // date validator
    $start_date->addValidator(new Zend_Validate_Date('Y-m-d'));
    $this->addElement($start_date);
    unset($start_date);
    // Element: end_date
    $end_date = new Zend_Form_Element_Text('end_date',
        array(
             'label' => 'End date',
             'required' => false,
             'filters' => array('StringTrim', 'StripTags'),
             'class' => 'input-small datepicker',
             'decorators' => $customElementDecorators,
             'data-date' => date("Y-m-d"),
             'data-date-format' => 'yyyy-mm-dd',
             'value' => date("Y-m-d")
        )
    );
    $this->addElement($end_date);
    unset($end_date);

你绝对需要使用Javascript(或Jquery…有一个很好的插件:http://trentrichardson.com/examples/timepicker/)执行这样的动作在"实时"。另一种解决方案是在Post操作之后检查日期,并显示自定义的错误信息。

设置end的data-date属性时,将其值赋给date("Y-m-d", strtotime("+1 day"));

$end_date = new Zend_Form_Element_Text('end_date',
    array(
         'label' => 'End date',
         'required' => false,
         'filters' => array('StringTrim', 'StripTags'),
         'class' => 'input-small datepicker',
         'decorators' => $customElementDecorators,
         'data-date' => date("Y-m-d", strtotime("+1 day")),
         'data-date-format' => 'yyyy-mm-dd',
         'value' => date("Y-m-d")
    )
);