Php 在ZF2中解析日期

Php 在ZF2中解析日期,php,zend-framework2,Php,Zend Framework2,我有个问题 我使用的是ZF2,这里有一个错误 $inputFilter->add($factory->createInput(array( 'name' => 'dataInicial', 'required' => true, 'validators' => array( array( 'name' => 'NotEmpty', 'options' => array

我有个问题

我使用的是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::\u construct():无法分析位置0(2)处的时间字符串(2014年12月25日):意外字符
当我在纯php中执行相同的代码时,没有zend,它工作正常

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

也许有人知道是什么导致了这个错误?抱歉,我的英语不知道什么样的数据库后端和关系映射,但问题与日期的存储方式有关,我想,很可能是:Y/m/d

如果保存并获取此错误,则是因为需要此格式的日期。如果你正在补水,你可能还需要一个约会策略来处理补水问题,比如:

//InputFilter.php
类yourInputFilter()
{
$hydrator->getHydrator()->addStrategy('my_属性',新的MyDateHydrationStrategy());
$this->add(数组)(
“名称”=>“注册开始”,
'type'=>'Zend\Form\Element\DateTime',
'选项'=>数组(
'格式'=>'Y/m/d',
)
)); 
}
//YourForm.php
您的窗体扩展的类。。。。
{
$dateTime=new Element\dateTime('youDate');
$dateTime->setLabel('Date')
->设置选项(数组)(
'格式'=>'Y-m-d\TH:iP'
));
}
//Strategy.php
类myDateTimeStrategy实现StrategyInterface
{
公共职能(价值)
{
如果(是字符串($value)){
$value=新日期时间($value);
}
//可能会以不同的格式返回,但由于需要编辑,可能无法返回
//返回$value->格式(“m-d-Y”)
返回$value;
}
}
如果使用datetime小部件选择器,还需要更改js设置:

这将类似于:

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

取决于你使用的是哪一种。

你的英语还可以。;-)<代码>\Zend\Debug\Debug::dump($value)并检查它是否真的与您一样
string(10)“25/12/2014”
expecting@Crisp是的,我已经做过了。与预期一样,此回音字符串(10)“25/12/2014”感谢您的回答,但仍然无法正常工作。我和我的同事已经在这方面花了很多时间。我没有使用任何小部件选择器。这是我的表格,我的模型和de策略课,我的冲刺今天结束了,我真的需要这样做:(那么,当你将所有“d/m/Y”的实例都更改为“Y/m/d”并使用格式“2014/02/07”时发生了什么作为字符串?您还可以发布添加操作的控制器代码和模型代码的模式。Re模型模式只是想知道它是否设置为时间戳、日期或日期时间,或者什么:)事实上,我非常确定您在模式中设置了时间字段,而不是日期“未能解析时间字符串”通常是这样说的使用日期类型的字段时“无法分析日期字符串”