ZF2验证日期和时间格式PT_BR总是输入似乎不是一个有效的日期



利用ZF2 +原则2的项目

我尝试了很多格式。我正在使用一个没有验证的表单。

我的最后一次尝试是:

    $traindate = new ElementDateTime('trainDate');
    $traindate->setAttributes(array(
        'name' => 'trainDate',
        'id' => 'trainDate',
        'size' => '30',
        'class' => 'datepicker',
        'options' => array(
            'label' => '',
            'format' => 'd-m-Y H:i'
        ),
    ));

我需要使用输入设置事件的日期和时间。关于巴西的基本格式是:14-05-2014 20分15-05-2015 15:00

With表示日、月、年、时、分,就像我在选项->格式中表示的那样。

这种方式总是当我试图插入,我得到以下消息:输入似乎不是一个有效的日期

删除格式,我只能通过Y-m-d(美国格式)传递$form->isValid($data),但顺便说一下,我也不能传递时间到日期,这给我带来了很大的麻烦。

我需要在表单/输入上设置日期PT_BR,通过验证,转换数据做Mysql格式(YYYY-mm-dd HH:ii:ss)。然后从数据库中检索并转换回pt_br格式。

但是即使是我也不能将时间与日期传递到zf2表单,甚至这个错误消息。

我从这个表单中删除了所有的过滤器,试图得到工作,但不工作。

主要问题在哪里?

经过长时间的关注,我找到了正确而快速的解决方案。经过6个月的科学研究,我得到了:


:

    $traindate = new ElementDateTime('trainDate');
    $traindate->setAttributes(array(
        'name' => 'trainDate',
        'id' => 'trainDate',
        'size' => '30',
        'class' => 'datepicker',
    ));
    $traindate->setFormat('d/m/Y'); //ONLY WORKS ON THIS FORMAT.

文档和互联网上的人没有明确说明,但设置格式只适用于此表单。

要将它抓取到Entity,你需要编写你自己的Hydrator扩展DoctrineHydrator:

namespace ApplicationHydrator;
use DoctrineModuleStdlibHydratorDoctrineObject;
class MyCustomHydrator extends DoctrineObject {
    protected function handleTypeConversions($value, $typeOfField) 
    {
        if($typeOfField == 'datetime'){
            return DateTime::createFromFormat('d/m/Y', $value);
        }
        return parent::handleTypeConversions($value, $typeOfField);
    }
}

它使任何日期格式的工作变得简单。

我建议您在Train实体中进行日期转换工作。trainData属性gettersetter可以是:

//THE PROPERTY IS IN MYSQL FORMAT, BUT THE GETTER WILL RETURN IT ALWAYS IN THE BRAZILIAN ONE
public function getTrainDateTime() {
    return $this->trainDateTime->format( 'd/m/Y H:i' );
}
//IT WILL ALWAYS RECIEVE A BRAZILIAN DATETIME, CONVERT IT TO MYSQL FORMAT
public function setTrainDateTime( $trainDateTime ) {
    $time = DateTime::createFromFormat( 'd/m/Y H:i', $trainDateTime )->getTimestamp();
    $this->trainDateTime = new DateTime( date( 'Y-m-d', $time ) );
    return $this;
}

如果你这样做,你总是可以自由地处理巴西日期,而不用担心格式。这些繁琐的工作将由实体类来完成。

相关内容

  • 没有找到相关文章

最新更新