Symfony4 DateTimeType作为single_text小部件格式不正确

时间:2019-04-15 14:12:57

标签: php symfony symfony4 datetime-format

这个问题开始使我发疯,并且我似乎找不到关于此问题的任何正确信息或文档。

我正在使用symfony 4.2.3

我有一个带有dateTimeType的表单:

 ->add(
            'startDate',
            DateTimeType::class,
            [
                'widget' => 'single_text',
                'input' => 'datetime',
                'html5' => false,
                'attr' => [
                    'class' => 'combinedPickerInput',
                    'placeholder' => date('d/m/y H:i'),
                ],
                'format' => 'd/m/Y H:i',
                'date_format' => 'd/m/Y H:i',
                'label' => 'form.specialOffer.startDate',
                'translation_domain' => 'Default',
                'required' => false,
            ]
        )

当我使用AJAX提交表单时,$ _ POST显示̀ {startDate = '24/04/2019 06:24'

但是,一旦我在窗体上使用getData()函数,该值就会变成DateTime对象(应该如此),但其格式不正确

startDate = {
    date = 2018-12-24 06:04:00.000000,
    timezone_type = 3
    timezone = "Europe/Paris"
}

我实体中的字段为

 /**
 * @ORM\Column(type="datetime", nullable=true)
 */
private $startDate;

我也尝试使用DateType代替DateTimeType,但这并没有改变任何内容。

->add(
            'endDate',
            DateType::class,
            [
                'widget' => 'single_text',
                'html5' => false,
                'attr' => [
                    'class' => 'combinedPickerInput',
                    'placeholder' => date('d/m/y H:i'),
                ],
                'format' => 'd/m/Y H:i',
                'label' => 'form.specialOffer.endDate',
                'translation_domain' => 'Default',
                'required' => false,
            ]
        )

结果与DateTimeType完全相同

在查看DateTimeType类时,似乎有些偏离。 设置日期格式时,代码如下

$dateFormat = \is_int($options['date_format']) ? $options['date_format'] : self::DEFAULT_DATE_FORMAT;

对我来说,这使得不可能使用不是int的date_format。但是,下面的验证和错误消息似乎表明实际上应该可以为自定义日期格式传递字符串

 if (!\in_array($dateFormat, self::$acceptedFormats, true)) {
        throw new InvalidOptionsException('The "date_format" option must be one of the IntlDateFormatter constants (FULL, LONG, MEDIUM, SHORT) or a string representing a custom format.');
    }

我对此一无所知,将不胜感激

2 个答案:

答案 0 :(得分:2)

您是否可以尝试使用 dd / MM / yyyy H:i 更改 format选项值,并使用DateTimeType代替DateType

->add('endDate', DateType::class, [
    'widget' => 'single_text',
    'html5' => false,
    'attr' => [
        'class' => 'combinedPickerInput',
        'placeholder' => date('d/m/y H:i'),
    ],
    'format' => 'dd/MM/yyyy H:i',
    'label' => 'form.specialOffer.endDate',
    'translation_domain' => 'Default',
    'required' => false,
])

答案 1 :(得分:0)

date_format字段中查看DateTimeType选项的文档。它与date()函数或DateTime类中使用的格式不同。

https://symfony.com/doc/current/reference/forms/types/datetime.html#date-format

您为date_format设置的值应为整数; https://www.php.net/manual/en/class.intldateformatter.php#intl.intldateformatter-constants

中列出的常量之一