You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel-Filamentphp中如何仅禁用周末或仅启用指定日期?

解决Filament DatePicker禁用周末/指定日期问题

一、仅禁用周末

Filament的DatePicker组件自带disabledDates()方法,通过闭包结合Carbon判断日期是否为周末即可实现需求:

DatePicker::make('issue_start_date')
    ->required()
    ->reactive()
    ->weekStartsOnSunday()
    // 新增:禁用周六、周日
    ->disabledDates(function (Carbon $date) {
        return $date->isWeekend();
    })
    ->afterStateUpdated(function (callable $set, $state)
    {
        $month = date('M', strtotime($state));
        $year  = date('Y', strtotime($state));
        ($month == null || $year === null)
            ? $set('name', null)
            : $set('name', $month . ' ' . $year);
    })
    ->dehydrateStateUsing(function (callable $set, $state)
    {
        if ($state === null) $set('name', null);
    }),

Carbon的isWeekend()方法会自动识别周六和周日,返回true时该日期会被禁用。

二、禁用除指定日期外的所有日期

如果需要仅开放特定日期选择,同样用disabledDates()方法,判断当前日期不在允许列表内则禁用:

// 定义允许选择的日期集合,可根据业务逻辑动态生成(比如从数据库读取)
$allowedDates = [
    Carbon::parse('2024-05-10'),
    Carbon::parse('2024-05-15'),
    Carbon::parse('2024-05-20'),
];

DatePicker::make('issue_start_date')
    ->required()
    ->reactive()
    ->weekStartsOnSunday()
    // 新增:仅允许选择指定日期
    ->disabledDates(function (Carbon $date) use ($allowedDates) {
        $allowedDateStrings = collect($allowedDates)->map(fn($d) => $d->toDateString())->toArray();
        return !in_array($date->toDateString(), $allowedDateStrings);
    })
    ->afterStateUpdated(function (callable $set, $state)
    {
        $month = date('M', strtotime($state));
        $year  = date('Y', strtotime($state));
        ($month == null || $year === null)
            ? $set('name', null)
            : $set('name', $month . ' ' . $year);
    })
    ->dehydrateStateUsing(function (callable $set, $state)
    {
        if ($state === null) $set('name', null);
    }),

这里先把允许的日期转为字符串格式,再对比当前日期是否在列表中,不在则禁用。

内容的提问来源于stack exchange,提问作者Amir Hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:45:13