表单构造器 - 字段
Date-time picker
概述
日期时间选择器提供了日期/时间选择的交互接口。
use Filament\Forms\Components\DatePicker;use Filament\Forms\Components\DateTimePicker;use Filament\Forms\Components\TimePicker; DateTimePicker::make('published_at')DatePicker::make('date_of_birth')TimePicker::make('alarm_at') 
  
自定义存储格式
使用 format() 方法,你可以自定义存入数据库时的字段格式。它接收一个字符串日期格式,使用 PHP 日期格式化 token:
use Filament\Forms\Components\DatePicker; DatePicker::make('date_of_birth')    ->format('d/m/Y')禁用秒输入
使用 seconds(false) 方法,你可以在时间选择器中禁用秒输入:
use Filament\Forms\Components\DateTimePicker; DateTimePicker::make('published_at')    ->seconds(false) 
  
时区
如果你希望用户在他们自己的时区中管理日期,你可以使用 timezone() 方法:
use Filament\Forms\Components\DateTimePicker; DateTimePicker::make('published_at')    ->timezone('America/New_York')虽然日期仍然使用应用配置的时区进行存储,不过日期仍然可以在新的时区中加载,并且会在表单中保存时会转换回来。
启用 JavaScript 日期选择器
默认情况下,Filament 使用本机 HTML5 时间选择器。使用 native(false) 方法,你可以启用更可自定义的 JavaScript 日期选择器。
use Filament\Forms\Components\DatePicker; DatePicker::make('date_of_birth')    ->native(false) 
  
请注意,虽然 JavaScript 日期选择器是可访问的,但它不支持像本机日期选择器那样的全键盘输入。如果需要全键盘输入,则应使用本机日期选择器。
自定义显示格式
你可以自定义该字段的显示格式,使之不同于其存入到数据库的格式。为此,请使用 displayFormat() 方法,该方法接收一个字符串日期格式:
use Filament\Forms\Components\DatePicker; DatePicker::make('date_of_birth')    ->native(false)    ->displayFormat('d/m/Y') 
  
如果希望使用与应用配置不同的区域(locale)设置,你也可以配置渲染显示时使用的区域设置。为此,可以使用 locale() 方法:
use Filament\Forms\Components\DatePicker; DatePicker::make('date_of_birth')    ->native(false)    ->displayFormat('d F Y')    ->locale('fr')配置时间输入间隔
使用 hoursStep()、minutesStep() 或者 secondsStep() 方法,你可以自定义小时、分钟、秒的增减的输入间隔:
use Filament\Forms\Components\DateTimePicker; DateTimePicker::make('published_at')    ->native(false)    ->hoursStep(2)    ->minutesStep(15)    ->secondsStep(10)一周的第一天
在某些国家,一周的第一天不是周一。要在日期选择器中自定义一周的第一天,请在组件中使用 firstDayOfWeek() 方法,可接收的参数值从 0 到 7,周一是 1,周日为 7 或 0:
use Filament\Forms\Components\DateTimePicker; DateTimePicker::make('published_at')    ->native(false)    ->firstDayOfWeek(7) 
  
还有一些更方便的助手方法可以更语义地设置一周的第一天:
use Filament\Forms\Components\DateTimePicker; DateTimePicker::make('published_at')    ->native(false)    ->weekStartsOnMonday() DateTimePicker::make('published_at')    ->native(false)    ->weekStartsOnSunday()禁用指定日期
要防止指定日期被选中:
use Filament\Forms\Components\DateTimePicker; DateTimePicker::make('date')    ->native(false)    ->disabledDates(['2000-01-03', '2000-01-15', '2000-01-20']) 
  
选中日期后关闭选择器
使用 closeOnDateSelection() 方法,可以在日期选中后关闭选择器:
use Filament\Forms\Components\DateTimePicker; DateTimePicker::make('date')    ->native(false)    ->closeOnDateSelection()使用 datalist 自动补全日期
除非你使用了 JavaScript 日期选择器,你可以使用 datalist() 方法,为日期选择器指定 datalist 选项:
use Filament\Forms\Components\TimePicker; TimePicker::make('appointment_at')    ->datalist([        '09:00',        '09:30',        '10:00',        '10:30',        '11:00',        '11:30',        '12:00',    ])当用户使用选择器时,Datalist 会为用户提供自动补全选项。不过,这些选项是纯推荐,用户仍然可以输入任何的值。如果你希望使用一套预定义的选项对用户进行严格的限制,请查阅 Select 字段。
在该字段旁边添加前后缀
使用 prefix() 和 suffix() 方法,你可以在输入框前后放置文本:
use Filament\Forms\Components\DatePicker; DatePicker::make('date')    ->prefix('Starts')    ->suffix('at midnight') 
  
使用图标作为前后缀
使用 prefixIcon() 和 suffixIcon() 方法,你可以在输入框前后放置图标:
use Filament\Forms\Components\TimePicker; TimePicker::make('at')    ->prefixIcon('heroicon-m-play') 
  
设置前后缀图标颜色
前后缀图标默认是灰色,不过你可以使用 prefixIconColor() 和 suffixIconColor() 方法将其设为不同颜色:
use Filament\Forms\Components\TimePicker; TimePicker::make('at')    ->prefixIcon('heroicon-m-check-circle')    ->prefixIconColor('success')使该字段只读
不要与禁用该字段混为一谈,你可以使用 readOnly() 方法使该字段只读:
use Filament\Forms\Components\DatePicker; DatePicker::make('date_of_birth')    ->readonly()请注意,此设置仅在原生日期选择器上强制执行。如果你使用 JavaScript 日期选择器,则需要使用 disabled()。
与 disabled() 相比,它有一些不同之处:
- 使用 readOnly()时,该字段仍然会在表单提交时发送到服务器。它可以通过浏览器控制台或者 JavaScript 操作改变。你可以使用dehydrated(false)来阻止该行为。
- 当使用 readOnly()时,它的样式没有任何改变。
- 当使用 readOnly()时,该字段仍然是可聚焦的。
日期时间选择器验证
除了验证页面中的所有规则,还有一些专门用于日期时间选择器的规则。
最大日期/最小日期验证
你可以限制选择器所能够选择的最小和最大日期。minDate 和 maxDate 接收一个 DateTime 实例(比如 Carbon)或者字符串:
use Filament\Forms\Components\DatePicker; DatePicker::make('date_of_birth')    ->native(false)    ->minDate(now()->subYears(150))    ->maxDate(now())Still need help? Join our Discord community or open a GitHub discussion
 
 
 
 
 
 
 
