Skip to main content
This reference covers the date, date/time, range, clock, month, year and duration controls. Most options accept a closure as well as a literal value, allowing configuration to depend on another field or the current record.

Common form options

These are regular Filament form fields. Use events and validation for complete callback recipes. Avoid replacing the normal persistence formatter unless you deliberately want a different output contract.

Appearance

Use ControlSize::Sm, Md or Lg if you prefer the size enum. Invalid variant names are configuration errors; soft is not a date/time variant.

Formats, language and timezone

displayFormat('H:i') explicitly chooses 24-hour output even if hourCycle(12) is set; use h:i A for an explicit 12-hour format. Prefer full-year Y to the two-digit y when the century matters. Date/clock typed parsers use numeric ASCII values; guided input also normalizes supported localized decimal digits.

Calendar systems

Full-date calendars use the systems available in @internationalized/date: Gregorian, Buddhist, Coptic, Ethiopic, Ethiopic Amete Alem, Hebrew, Indian, Islamic Civil, Islamic Tabular, Islamic Umm al-Qura, Japanese, Persian and ROC. Use supported identifiers such as gregory, persian, indian, hebrew, islamic-civil or islamic-umalqura. gregorian aliases gregory; islamic aliases islamic-civil.
The grid can use another calendar, but stored/display-format numeric dates and guided date entry retain Gregorian meaning. The language does not itself change that storage contract. Month/year partial values require Gregorian calendar storage. Use a full-date picker when selecting through another calendar system.

Precision and clock choices

Steps control menu/button choices, not divisibility validation of all typed values. Use a custom rule or allowedTimes() if only exact values may submit. allowedTimes() on a day-only field is invalid configuration.

Bounds and availability

Invalid bounds are configuration errors. Clock bounds must be ordered within one day. Date availability callbacks belong to date/period fields, not clocks or durations. Range availability validates its endpoints; add your own business rule for unavailable interior days or minimum/maximum stay length.

Calendar presentation

withRecommendedDefaults() applies a preset at the moment it is called. Options called afterwards override it. Put the preset first to keep your explicit hour cycle and precision.

Dynamic configuration

Make the dependency live if the calendar should refresh immediately when it changes. A field’s dynamic rules are evaluated again during validation; presentation alone does not replace server checks.

Choosing options for your form

Use FlexDatePicker. Keep its default editable(false) and Y-m-d storage.
Use FlexDateTimePicker, allowedTimes([...]), and optionally disabledWeekdays().
Use FlexDateRangeField::make('period')->rangePresets([]).
Use a timed FlexDateRangeField with dates on both endpoints. A FlexTimeRangeField stays within one day.
Use FlexDurationField. A clock is always a time of day.
Last modified on October 20, 2026