如何设置从选定日期到当前日期的 DateType 范围?

How to set DateType range from selected date to current date?

我想创建 select 年份和月份。当前解决方案不起作用,我将所有月份都削减到 7,因为此时 post 的当前月份是“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,
        ]
    )

如何让之前所有年份的月份都为12selection,而在当前年份,将无法选择未来的月份?

这是因为您使用笨拙的表达式定义从一月到当前日期月份的月份间隔

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"))

?

输入值的呈现发生在服务器端,因此您无法从输入动态 add/remove 值。 如果您仍想使用分隔的输入值来选择日期,则必须自己编写 JS 代码来动态替换值。

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

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