首页 > 解决方案 > 如何设置从选定日期到当前日期的 DateType 范围?

问题描述

我想为此创建让我们选择年份和月份。当前的解决方案不起作用,我将所有月份都削减为7,因为此时发布的当前月份是“7”。

 $builder->add(
        'filter_date',
        DateType::class,
        [
            'format' => 'yMd',
            'years' => range(
                (new DateTime('2013-01-01'))->format('Y'),
                (new DateTime())->format('Y')
            ),
            'months' => range(
                (new DateTime('2013-01-01'))->format('m'),
                (new DateTime())->format('m')
            ),
            'days' => [1],
            'placeholder' => [
                'year' => '----',
                'month' => '----',
                'day' => false,
            ],
            'required' => true,
        ]
    )

如何使之前的所有年份都有12个月份选择,而在今年,它将无法选择未来的月份?

标签: phpsymfonydate-rangeformbuilder

解决方案


那是因为您正在使用尴尬的表达式定义从一月到当前日期的月份的间隔

range(
                (new DateTime('2013-01-01'))->format('m'),
                (new DateTime())->format('m')
            )

关于什么

'months' => range(1,12)

如果你想回到 5 年前,那么多年来很简单

'years' => range(date("Y")-5, date("Y"))

或者如果您希望 2013 年作为固定开始

'years' => range(2013, date("Y"))

?

输入值的呈现发生在服务器端,因此您无法从输入中动态添加/删除值。如果您仍然想使用单独的输入值来选择日期,您必须编写自己的 JS 代码来动态替换值。

如果您同意日期选择器,则可以使用以下方法。

'widget' => 'single_text',
'attr' => array(
        'max' => date('Y-m-d')
    )

推荐阅读