我遇到了问题。
我正在使用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');
也许有人知道导致错误的原因是什么?对不起我的英文
答案 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');
取决于您使用的是哪一个。