Symfony4 DateTimeType as single_text 小部件格式不正确
Symfony4 DateTimeType as single_text widget not formatting correctly
这个问题开始让我抓狂,我似乎找不到关于这个问题的任何正确信息或文档。
我正在使用 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 class 时似乎有些不对劲。
设置日期格式时代码如下
$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.');
}
我对此感到很迷茫任何帮助将不胜感激
您能否尝试将 格式选项值 更改为 dd/MM/yyyy H:i 并使用 DateTimeType 而不是日期类型
->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,
])
查看 DateTimeType
字段中 date_format
选项的文档。它与 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
中列出的常量之一
这个问题开始让我抓狂,我似乎找不到关于这个问题的任何正确信息或文档。
我正在使用 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 class 时似乎有些不对劲。 设置日期格式时代码如下
$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.');
}
我对此感到很迷茫任何帮助将不胜感激
您能否尝试将 格式选项值 更改为 dd/MM/yyyy H:i 并使用 DateTimeType 而不是日期类型
->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,
])
查看 DateTimeType
字段中 date_format
选项的文档。它与 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