在ZF2中解析日期

时间:2014-02-06 17:35:27

标签: php zend-framework2

我遇到了问题。

我正在使用ZF2,并在此处收到错误。

$inputFilter->add($factory->createInput(array(
    'name' => 'dataInicial',
    'required' => true,
    'validators' => array(
        array(
            'name' => 'NotEmpty',
            'options' => array(
                'messages' => array(
                    \Zend\Validator\NotEmpty::IS_EMPTY => 'A data do feriado deve ser preenchida.'
                )
            )
        ),
        array(
            'name' => 'callback',
            'options' => array(
                'messages' => array(
                    \Zend\Validator\Callback::INVALID_CALLBACK => 'Data no formato inválido.'
                ),
                'callback' => function ($value, $context = array()) {
                        $dataInicial = \DateTime::createFromFormat('d/m/Y', $value);
                        return $dataInicial->format('d/m/Y');
                }
            )
        )
    )
)));

我收到了这个错误:

DateTime::__construct(): Failed to parse time string (25/12/2014) at position 0 (2): Unexpected character

当我在纯php中执行相同的代码时,没有zend,它可以正常工作。

echo DateTime::createFromFormat('d/m/Y', '25/12/2014')->format('d/m/Y');

也许有人知道导致错误的原因是什么?对不起我的英文

1 个答案:

答案 0 :(得分:0)

不知道什么样的数据库后端和关系映射,但问题与我想象的日期存储方式有关,很可能是:Y / m / d

如果您保存并收到此错误,那就是因为您需要此格式的日期。如果你正在补水,你可能还需要一个日期策略来处理水合作用,如:

// InputFilter.php
class yourInputFilter()
{

    $hydrator->getHydrator()->addStrategy('my_attribute', new MyDateHydrationStrategy()); 

    $this->add( array(
        'name' => 'registration_starts', 
        'type' => 'Zend\Form\Element\DateTime', 
        'options' => array ( 
            'format'=>'Y/m/d',                 
        )
    )); 
}
// YourForm.php
class YourForm Extends ....
{
    $dateTime = new Element\DateTime('youDate');
    $dateTime->setLabel('Date')
             ->setOptions(array(
                'format' => 'Y-m-d\TH:iP'
    ));
}
// Strategy.php
class myDateTimeStrategy implements StrategyInterface
{
    public function hydrate($value)
    {
        if (is_string($value)) {
            $value = new DateTime($value);
        }

        // Could return in a different format, probably can't though because of when you need to edit
        // return $value->format("m-d-Y")

        return $value;
    }
}

如果您使用日期时间窗口小部件选择器,则还需要更改js设置:

这将是:

$('.datepicker').datepicker('format', 'yyyy/mm/dd');

取决于您使用的是哪一个。