Skip to content

Date Picker

The Date Range Picker component allows users to select a start and end date, typically through text fields with calendar popovers.

  • Collect a date range in forms or filters (e.g., booking reservations, event scheduling, report date filtering).
  • When users need to define a bounded period and visual calendar selection improves accuracy.
  • Pair with time inputs if time-of-day precision is required.
  • Dual segmented fields: Separate start and end date fields with a separator (e.g., “to” or ”–”).
  • Popover calendar: Single or dual calendar view triggered from fields or button.
  • Inline with validation: Prevent invalid ranges (e.g., end date before start date) or include error states for invalid ranges.
  • For single date selection; use Date Picker instead.
  • For open-ended ranges (e.g., “from date onward”); use single Date Field.
  • For large or complex range selection requiring advanced controls; consider custom solutions.
  • When space is severely constrained on mobile without responsive adaptation.
VariantUse Case
Day (default)Standard day-level granularity
MonthCoarse selection for month-based ranges
With TimeInclude time selection for precise datetime ranges
ElementDescription
LabelText describing the overall range purpose.
Start FieldSegmented or text field for start date entry.
End FieldSegmented or text field for end date entry.
SeparatorVisual or textual divider between start and end (e.g., “to” or ”–”).
TriggerOptional button or field interaction to open calendar popover.
Popover/DialogContainer for the range calendar(s).
Range CalendarOne or two month grids for selecting start and end dates.
Preset ButtonsOptional quick-select range options.
  • Calendar icon on trigger or fields for affordance.
StateDescriptionVisual Indicators
DefaultDefault interactive stateNeutral border and text
HoverCursor over objectSubtle border or background change
FocusKeyboard focus (visible on Tab or arrow key navigation) or on clickHigh-contrast focus ring
DisabledNon-interactiveGrayed out, reduced opacity
InvalidValidation error (e.g., end before start)Red border, error icon/message
  • Use clear labels (e.g., “Date range”, “Check-in to check-out”).
  • Individual fields: “Start date” and “End date” if separately labeled.
  • Placeholder: Locale-appropriate format (e.g., “mm/dd/yyyy”).
  • Error messages: Specific (e.g., “End date must be after start date”).
  • Presets: Concise and descriptive (e.g., “Today”, “Last 30 days”).
  • Use role="group" with aria-labelledby for the overall picker.
  • Field supports aria-label describing the range (e.g., “Date range”).
  • Calendar grid uses role="grid" with aria-selected for highlighted range.
  • Announce selected range and validation errors via live region or description.
  • Support aria-required, aria-invalid, and aria-errormessage.

Support standard keyboard navigation

  • Tab: Focus fields or trigger; move between start/end fields.
  • Enter/Space: Open popover from trigger or focused field.
  • Arrow keys: Navigate calendar grid; select dates.
  • Page Up/Down: Switch months.
  • Home/End: First/last day of month.
  • Escape: Close popover.