首页 > 解决方案 > Symfony4 DateTimeType 作为 single_text 小部件的格式不正确

问题描述

这个问题开始让我发疯,我似乎无法找到有关此问题的任何正确信息或文档。

我正在使用 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.');
    }

我很迷茫,任何帮助将不胜感激

标签: phpsymfonysymfony4datetime-format

解决方案


您可以尝试使用dd/MM/yyyy H:i更改格式选项值并使用 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,
])

推荐阅读