可以';t为Zend Framework 2 date表单元素设置日期格式


Can't set date format for Zend Framework 2 Date form element?

我只是想在Form中创建一个Date元素,但无论我如何更改,日期格式都是"mm/dd/yyyy"。我试着这样设置:

    $this->add(array(
        'name' => 'ct-start_date',
        'options' => array(
                    'label' => 'Start Date',
                    'format'=>'Y-m-d'
                    ),
        'attributes' => array(
            'class' => 'ct-date',
        ),
        'type'  => 'Zend'Form'Element'Date',
    ));

显示如下:

    echo $this->formRow($form->get('ct-start_date'));

但它仍然显示为"mm/dd/yyyy",即使当我这样做时:

    print_r($form->get('ct-start_date')->getFormat());

结果是"Y-m-d"!所以我添加了这个:

    $this->get('ct-start_date')->setOptions(array('format'=>'Y-m-d'));

没有变化。然后我尝试了这个:

    $date = new Element'Date('ct-start_date');
    $date
        ->setLabel('Start Date')
        ->setAttributes(array(
            'class' => 'ct-date',
        ))
        ->setOptions(array(
            'format' => 'Y-m-d'
        ));
    $this->add($date);

同样的事情!这是在Chrome中。在Firefox中,它只是一个空文本输入。也许我应该放弃jQuery。

Date元素中的format选项不会影响元素中日期的输入或输出格式。

元素的getInputSpecification()方法使用它来确定与验证器一起使用的日期格式。

示例:

$this->add(array(
    'name' => 'ct-start_date',
    'options' => array(
                'label' => 'Start Date',
                'format'=>'Y-m-d'
                ),
    'attributes' => array(
        'class' => 'ct-date',
    ),
    'type'  => 'Zend'Form'Element'Date',
));
//...
public function getInputFilter()
{
    $filter = new InputFilter()
    // add default filters and validators for the date element
    // the date validator will automatically be set up to accept dates
    // formatted according to your elemen's "format" option
    $filter->add($this->get('ct-start-date')->getInputSpecification());
    ../
    return $filter;
}

如果要用服务器端的日期值填充表单元素,则它需要采用适当的格式(例如$element->setValue(date('Y-m-d', $date));

在客户端,他们要么需要以适当的格式键入,要么验证器会返回错误,或者确保您使用的任何客户端日期输入都是Y-m-d格式。