奏鸣曲日期范围

Posted

技术标签:

【中文标题】奏鸣曲日期范围【英文标题】:Sonata Date range 【发布时间】:2018-03-01 17:15:14 【问题描述】:

我有一个小问题我正在使用 Sonata 进行一个小项目,但我正在尝试弄清楚如何自定义人们可以选择日期的日期范围,例如从 2000 年 1 月 1 日到 2020 年 12 月 31 日。有人可以告诉我在奏鸣曲文档中的哪里可以找到它或告诉我如何去做?因为我稍微看了一下,我没有什么可以完全自定义日期的选择。

提前致谢

编辑:

在 symfony 文档中我发现了这个

'days' => range(1,31)

这里:http://symfony.com/doc/current/reference/forms/types/date.html

但我在奏鸣曲文档中找不到任何内容。而且不像在 Symfony 上那样工作:/

【问题讨论】:

【参考方案1】:

我假设您在 Sonata 中使用 sonata_type_date_picker 字段。文档是here。那么你的案例可以这样实现:

->add('userDate', 'sonata_type_date_picker', [
    'dp_min_date' => 'Jan 1, 2000', //todo: date format here depends on your setup. Basicly it's the same format, you see in text field after you selected data in datepicker.
    'dp_max_date' => 'Dec 31, 2020',
]);

或者,您可以使用带有 3 个下拉菜单的日期选择器 - 这是标准的 Symfony date 字段,可与 SonataAdmin 配合使用:

->add('userDate', 'date', [
    'years' => range(2000, 2020),
]);

我还建议添加具有相同规则的后端验证(在实体中):

/**
 * @var \DateTime()
 *
 * @Assert\Range(
 *      min = "2000-01-01",
 *      max = "2020-12-31"
 * )
 */
protected $userDate;

【讨论】:

谢谢,但我用过,但我挑不出来。现在它就像我使用之前的文本区域 ->add('userDate', 'date', ....) 并且我能够选择它。这对用户来说更容易。你知道我怎么用'sonata_type_date_picker'来做到这一点 那么,你想要 3 个下拉菜单还是一个日期选择器?如果是日期选择器,您将看到文本输入。您需要在页面中添加一些 javascript(可以通过配置完成),然后除了文本输入之外,您还会看到 datepicker。 如果可以有 3 个下拉菜单就完美了

以上是关于奏鸣曲日期范围的主要内容,如果未能解决你的问题,请参考以下文章

奏鸣曲日期选择器在其他语言环境中不起作用

Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

Symfony 3 和奏鸣曲管理员

PHP:选择时间范围重叠日期的重叠日期时间范围

MySQL 检查日期范围是不是在日期范围内

从两组日期范围 C# 中查找间隔日期范围