Skip to main content

Date Picker

View as Markdown

A calendar for picking a single date, several dates, or a range of dates.

<primitives:datePicker.root>
    <primitives:datePicker.label />
    <primitives:datePicker.control>
        <primitives:datePicker.input />
        <primitives:datePicker.clearTrigger />
        <primitives:datePicker.trigger />
    </primitives:datePicker.control>
    <primitives:datePicker.hiddenInput />
    <primitives:datePicker.positioner>
        <primitives:datePicker.content>
            <primitives:datePicker.view view="day">
                <primitives:datePicker.viewControl view="day">
                    <primitives:datePicker.prevTrigger view="day" />
                    <primitives:datePicker.viewTrigger view="day">
                        <primitives:datePicker.rangeText />
                    </primitives:datePicker.viewTrigger>
                    <primitives:datePicker.nextTrigger view="day" />
                </primitives:datePicker.viewControl>
                <primitives:datePicker.table view="day">
                    <primitives:datePicker.tableHeader />
                    <primitives:datePicker.tableBody />
                </primitives:datePicker.table>
            </primitives:datePicker.view>
            <primitives:datePicker.monthSelect />
            <primitives:datePicker.yearSelect />
            <primitives:datePicker.presetTrigger />
        </primitives:datePicker.content>
    </primitives:datePicker.positioner>
</primitives:datePicker.root>

The calendar has three views: day, month, and year. The content only holds what you put into it, so you render the views you need yourself, each in a view with its controls and its table. Every example on this page loops over the views; write them out one by one if the views differ. The tableHeader and tableBody belong to the table they sit in. Its cells, the weekday headings, and the options of monthSelect and yearSelect are not part of the markup you write: they depend on the locale and on the month shown, so the client builds them. Because of that, the grid of an inline date picker is empty until it hydrates: showSkeleton="{true}" on the tableHeader and the tableBody of the day view fills the gap with a placeholder (see Inline).

typo3 ui:add date-picker

Read more about installing Components and Primitives.

Pass defaultValue as an ISO date (2025-06-15), a DateTimeInterface, or a list of them. A Field inside a Form that is bound to an object takes the value of the property the field is named after.

Use with the Field component for form validation.

Set selectionMode to DatePickerSelectionMode::Range (an enum, so selectionMode="{f:constant(name: 'Jramke\FluidPrimitives\Enum\DatePickerSelectionMode::Range')}") and add an input for each end of the range with its index. The presetTrigger selects a range with one click. Its value is a case of the DatePickerRangePreset enum (value="{f:constant(name: 'Jramke\FluidPrimitives\Enum\DatePickerRangePreset::Last7Days')}"): ThisWeek, LastWeek, ThisMonth, LastMonth, ThisQuarter, LastQuarter, ThisYear, LastYear, Last3Days, Last7Days, Last14Days, Last30Days, or Last90Days.

–

Set selectionMode to DatePickerSelectionMode::Multiple and limit the number of dates with maxSelectedDates. The input shows the first date only, so the example lists all of them below it, with an onValueChange callback it gives the DatePicker in its entry file (see Unavailable Dates).

No dates selected

numOfMonths shows several months of the day view next to each other. Render one table per month in the day view, with the offset of the month it shows (0 for the first, 1 for the next). The example keeps the offsets in a months variable, so the same list sets numOfMonths and drives the loop. The month and year views always show a single table. The ui copy of content hides the days outside the visible month when numOfMonths is above 1, so no day shows up in two neighbouring months.

–

Restrict the dates that can be selected with min and max, each an ISO date (2025-06-15) or a DateTimeInterface, like a date of your model. defaultFocusedValue takes the same.

Render the calendar in the page, without a popup, with inline="{true}". It is always open and needs no control.

isDateUnavailable, format, parse, createCalendar, and the on...Change callbacks are functions, so a template can't pass them. Create the DatePicker in your entry file instead and hand them to it with the other props. Here the weekends are unavailable.

Set minView to DatePickerView::Month to pick a month instead of a day, and defaultView to open on the month view. The picked month is its first day, so the hiddenInput submits the first of the month. Render only the views the calendar can reach: the day view is left out here. format and parse turn the input into 06/2025 and read it back. They are functions, so they come from the entry file as in Unavailable Dates, and placeholder tells people what to type.

For a year picker, use DatePickerView::Year for minView and defaultView, render the year view only, and let format return String(date.year) and parse return new CalendarDate(year, 1, 1).

The hiddenInput submits each selected date as the W3C date-time of its midnight (2025-06-15T00:00:00+02:00), whatever format the locale shows it in. The visible input has no name and is not submitted, and ui:datePicker.root renders the hiddenInput for you. A range or several dates submit one value per date under the same name, so end the name with [] (dates[]) for PHP to receive all of them. A date picker without a date submits an empty value.

That is the format Extbase maps to a DateTime property without any configuration. The offset is the one of the time zone PHP runs in, so the property holds the date that was picked: Extbase converts any other offset to that time zone, which can move the date to the day before or after. Extbase maps a request value to a DateTime only: it reads a DateTimeImmutable from the database, but has no type converter for one from a request. Type the property DateTime, or write a custom type converter for DateTimeImmutable if you need it. Outside Extbase, new DateTimeImmutable($_POST['date']) reads the value.

The calendar works in the time zone of the browser: it highlights today for the person looking at it, and the presets and min/max count from there. Zag falls back to UTC without a timeZone, which highlights the wrong day for a few hours of the day almost everywhere, so Fluid Primitives replaces that default. Set timeZone (Europe/Berlin) to use another one, like the time zone of a venue. The submitted dates carry the offset of the time zone PHP runs in, whatever timeZone is, so it never changes what is submitted.

Dates are formatted for the language of the site, or for the locale you pass. Every label, from the buttons and the day cells to the month and year select and the placeholder of the input, is shipped via XLF in English and German and follows the current Site Language. They are the datePicker.* units of the language file. Some contain a %placeholder% that is filled in when the label renders, like the %date% of a day cell.

For per-template overrides, pass translated strings through the translations prop, by the id of the unit without datePicker..

<ui:datePicker.root
    translations="{
        clearTrigger: f:translate(key: 'LLL:EXT:site_package/Resources/Private/Language/locallang.xlf:datePicker.clear'),
        dayCell: 'Pick %date%'
    }"
>
    ...
</ui:datePicker.root>

The client builds the labels Zag wants as functions of the date or the view from these texts. To change one of those from TypeScript, spread the translations your entry file receives and override it the way Zag takes it:

const datePicker = new DatePicker({
    ...props,
    translations: { ...props.translations, dayCell: state => `Pick ${state.valueText}` },
});

The following tables cover the available props of the Fluid Primitives. For a full list of available client side props and methods, see the Zag.js Machine API.

Provides shared date picker state and wraps all related parts. Renders a <div> element.

NameDescriptionRequiredDefault
localestring
The locale (BCP 47 language tag) used to format and parse dates. Inherited from the site's language.
No
-
timeZonestring
The IANA time zone dates are evaluated in, e.g. `Europe/Berlin`. Defaults to the time zone of the browser.
No
-
namestring
The `name` attribute of the underlying input. Inherited from a surrounding field when available.
No
-
disabledboolean
Whether the date picker is disabled. Inherited from a surrounding field when available.
No
-
readOnlyboolean
Whether the date picker is read-only. Inherited from a surrounding field when available.
No
-
requiredboolean
Whether the date picker is required. Inherited from a surrounding field when available.
No
-
invalidboolean
Whether the date picker is invalid. Inherited from a surrounding field when available.
No
-
outsideDaySelectableboolean
Whether a day outside the visible month can be selected.
No
false
minDateTimeInterface|string
The minimum date that can be selected: an ISO date string (`2025-01-31`) or a `DateTimeInterface`.
No
-
maxDateTimeInterface|string
The maximum date that can be selected: an ISO date string (`2025-01-31`) or a `DateTimeInterface`.
No
-
closeOnSelectboolean
Whether the calendar should close after the date selection is complete. Ignored when `selectionMode` is `multiple`.
No
true
openOnClickboolean
Whether to open the calendar when the input is clicked.
No
false
defaultValueDateTimeInterface|string|array
The initial selected date(s) when rendered: an ISO date string (`2025-01-31`), a `DateTimeInterface`, or a list of them. Use when you don't need to control the selected date(s) of the date picker. Inherited from a surrounding field when available.
No
-
defaultFocusedValueDateTimeInterface|string
The initially focused date when rendered: an ISO date string or a `DateTimeInterface`. Use when you don't need to control the focused date of the date picker.
No
-
numOfMonthsinteger
The number of months the day view shows next to each other.
No
-
startOfWeekinteger
The first day of the week. `0` is Sunday, `1` is Monday, and so on.
No
1
fixedWeeksboolean
Whether the calendar should render with a fixed number of weeks (6), instead of 5 or 6 depending on the month.
No
-
showWeekNumbersboolean
Whether to show the week number column in the day view.
No
-
selectionModeEnum\DatePickerSelectionMode
The selection mode of the calendar: `single`, `multiple`, or `range`.
No
Single
maxSelectedDatesinteger
The maximum number of dates that can be selected. Only applicable when `selectionMode` is `multiple`.
No
-
placeholderstring
The placeholder text of the input. Defaults to the date format of the `locale`, e.g. `dd.mm.yyyy`.
No
-
defaultViewEnum\DatePickerView
The view the calendar starts in: `day`, `month`, or `year`.
No
Day
minViewEnum\DatePickerView
The smallest view of the calendar. `month` turns it into a month picker.
No
Day
maxViewEnum\DatePickerView
The largest view of the calendar.
No
Year
positioningarray
The positioning options of the calendar content.
No
{
    "placement": "bottom-start",
    "gutter": 8
}
defaultOpenboolean
The initial open state of the date picker when rendered. Use when you don't need to control the open state of the date picker.
No
false
inlineboolean
Whether to render the calendar in the page, without a popup. It is always open and has no trigger.
No
false
translationsarray
Localized date picker labels, by the id of the `datePicker.*` units of the language file. Use `f:translate` for per-template localization overrides when needed.
No
-
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
rootIdstring
The root ID of the component, used for hydration and identification.
No
-
idsarray
The IDs of of the component parts for composition.
No
[]
autoMountboolean
Whether the client initializes the component on its own. Set it to false to mount it yourself with `mount()`
No
true
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-root<uid>
data-state"open" | "closed"
data-disabledPresent when disabled
data-readonlyPresent when read-only
data-emptyPresent when the content is empty

Labels an input. Renders a <label> element.

NameDescriptionRequiredDefault
indexinteger
The index of the input this label is for, in range mode (`0` or `1`).
No
0
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-label<uid>
data-state"open" | "closed"
data-indexThe index of the item
data-disabledPresent when disabled
data-readonlyPresent when read-only
data-invalidPresent when invalid

Groups the input and the triggers. Renders a <div> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-control<uid>
data-disabledPresent when disabled
data-placeholder-shownPresent when placeholder is shown
data-invalidPresent when invalid

Shows the selected date as text and lets people type one. Renders an <input> element.

NameDescriptionRequiredDefault
indexinteger
The index of this input, in range mode (`0` or `1`).
No
0
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-input<uid>
data-indexThe index of the item
data-state"open" | "closed"
data-placeholder-shownPresent when placeholder is shown
data-invalidPresent when invalid

Clears the selection. Renders a <button> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Opens and closes the calendar. Renders a <button> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-trigger<uid>
data-placementThe placement of the trigger
data-sideThe side of the trigger that the trigger is positioned on
data-state"open" | "closed"
data-placeholder-shownPresent when placeholder is shown

Submits the selected dates as W3C date-times, one input per date. Renders <input type="hidden"> elements.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]

Positions the floating calendar. Renders a <div> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-positioner<uid>
data-nestedPresent when the positioner is nested within another {{widget}}
data-has-nestedPresent when the positioner has nested {{widget}}s

The calendar surface, positioned by positioner. Renders a <div> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-content<uid>
data-state"open" | "closed"
data-placementThe placement of the content
data-sideThe side of the trigger that the content is positioned on
data-inlinePresent when the content is inline
data-nestedpopover
data-has-nestedpopover

Wraps one view of the calendar: day, month, or year. Renders a <div> element.

NameDescriptionRequiredDefault
viewstring
The view this element renders: `day`, `month`, or `year`.
Yes
-
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-view<uid>
data-viewThe view of the view

Groups the buttons that move through a view. Renders a <div> element.

NameDescriptionRequiredDefault
viewstring
The view this element controls: `day`, `month`, or `year`.
Yes
-
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-view-control<uid>
data-viewThe view of the viewcontrol

Moves a view back: to the previous month, year, or decade. Renders a <button> element.

NameDescriptionRequiredDefault
viewstring
The view this element navigates: `day`, `month`, or `year`.
Yes
-
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-prev-trigger<uid>
data-disabledPresent when disabled

Moves a view forward: to the next month, year, or decade. Renders a <button> element.

NameDescriptionRequiredDefault
viewstring
The view this element navigates: `day`, `month`, or `year`.
Yes
-
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-next-trigger<uid>
data-disabledPresent when disabled

Switches to the next larger view. Renders a <button> element.

NameDescriptionRequiredDefault
viewstring
The view this element switches away from: `day`, `month`, or `year`.
Yes
-
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-view-trigger<uid>
data-viewThe view of the viewtrigger
data-disabledPresent when disabled

Shows the range of dates a view displays, like "June 2025". Renders a <span> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Wraps the grid of a view. Renders a <table> element.

NameDescriptionRequiredDefault
viewstring
The view this table renders: `day`, `month`, or `year`.
No
'day'
offsetinteger
Which month of the day view this table shows, counted from the first visible month: `0` for the first, `1` for the next. Only used with `numOfMonths` above `1`.
No
0
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-table<uid>
data-columns
data-viewThe view of the table

Holds the weekday headings of the day view, built on the client. Renders a <thead> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-table-header<uid>
data-viewThe view of the tableheader
data-disabledPresent when disabled

Holds the days, months, or years of a view, built on the client. Renders a <tbody> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Rendered data attributes

AttributeDescription
data-date-picker-table-body<uid>
data-viewThe view of the tablebody
data-disabledPresent when disabled

Jumps to a month, its options built on the client. Renders a <select> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Jumps to a year, its options built on the client. Renders a <select> element.

NameDescriptionRequiredDefault
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-

Selects a predefined range of dates. Renders a <button> element.

NameDescriptionRequiredDefault
valueEnum\DatePickerRangePreset
The range the preset selects, like `DatePickerRangePreset::Last7Days`.
Yes
-
attributesarray
Additional attributes that should be rendered on the component where ui:attributes is used.
No
[]
asChildboolean
If true the component uses its child only without the component template. Like Radix UI asChild or Base UI render props.
No
-
classstring
The CSS class(es) to be applied to the component.
No
-
NameTypeDescription
focusedbooleanWhether the input is focused
openbooleanWhether the date picker is open
disabledbooleanWhether the date picker is disabled
invalidbooleanWhether the date picker is invalid
readOnlybooleanWhether the date picker is read-only
inlinebooleanWhether the date picker is rendered inline
numOfMonthsnumberThe number of months to display
showWeekNumbersbooleanWhether the week number column is shown in the day view
selectionModeSelectionModeThe selection mode (single, multiple, or range)
maxSelectedDatesnumber | undefinedThe maximum number of dates that can be selected (only for multiple selection mode).
isMaxSelectedbooleanWhether the maximum number of selected dates has been reached.
viewDateViewThe current view of the date picker
getWeekNumber(week: DateValue[]) => numberReturns the ISO 8601 week number (1-53) for the given week (array of dates).
getDaysInWeek(week: number, from?: DateValue) => DateValue[]Returns an array of days in the week index counted from the provided start date, or the first visible date if not given.
getOffset(duration: DateDuration) => DateValueOffsetReturns the offset of the month based on the provided number of months.
getRangePresetValue(value: DateRangePreset) => DateValue[]Returns the range of dates based on the provided date range preset.
getMonthWeeks(from?: DateValue) => DateValue[][]Returns the weeks of the month from the provided date. Represented as an array of arrays of dates.
isUnavailable(date: DateValue) => booleanReturns whether the provided date is available (or can be selected)
weeksDateValue[][]The weeks of the month. Represented as an array of arrays of dates.
weekDaysWeekDay[]The days of the week. Represented as an array of strings.
visibleRangeVisibleRangeThe visible range of dates.
visibleRangeTextVisibleRangeTextThe human readable text for the visible range of dates.
valueDateValue[]The selected date.
valueAsDateDate[]The selected date as a Date object.
valueAsStringstring[]The selected date as a string.
focusedValueDateValueThe focused date.
focusedValueAsDateDateThe focused date as a Date object.
focusedValueAsStringstringThe focused date as a string.
selectTodayVoidFunctionSets the selected date to today.
setValue(values: DateValue[]) => voidSets the selected date to the given date.
setTime(time: Time, index?: number) => voidSets the time for a specific date value. Converts CalendarDate to CalendarDateTime if needed.
setFocusedValue(value: DateValue) => voidSets the focused date to the given date.
clearValue(options?: { focus?: boolean }) => voidClears the selected date(s).
setOpen(open: boolean) => voidFunction to open or close the calendar.
focusMonth(month: number) => voidFunction to set the selected month.
focusYear(year: number) => voidFunction to set the selected year.
getYears() => Cell[]Returns the months of the year
getYearsGrid(props?: YearGridProps) => YearGridValueReturns the years of the decade based on the columns. Represented as an array of arrays of years.
getDecade() => Range<number | undefined>Returns the start and end years of the decade.
getMonths(props?: MonthFormatOptions) => Cell[]Returns the months of the year
getMonthsGrid(props?: MonthGridProps) => MonthGridValueReturns the months of the year based on the columns. Represented as an array of arrays of months.
format(value: DateValue, opts?: Intl.DateTimeFormatOptions) => stringFormats the given date value based on the provided options.
setView(view: DateView) => voidSets the view of the date picker.
goToNextVoidFunctionGoes to the next month/year/decade.
goToPrevVoidFunctionGoes to the previous month/year/decade.
getDayTableCellState(props: DayTableCellProps) => DayTableCellStateReturns the state details for a given cell.
getMonthTableCellState(props: TableCellProps) => TableCellStateReturns the state details for a given month cell.
getYearTableCellState(props: TableCellProps) => TableCellStateReturns the state details for a given year cell.
getRootState() => RootStateReturns the state of the root.
getContentState() => ContentStateReturns the state of the content.
getTriggerState() => TriggerStateReturns the state of the trigger.
getInputState() => InputStateReturns the state of the input.
KeyDescription
ArrowLeftMoves focus to the previous day within the current week.
ArrowRightMoves focus to the next day within the current week.
ArrowUpMoves focus to the same day of the week in the previous week.
ArrowDownMoves focus to the same day of the week in the next week.
HomeMoves focus to the first day of the current month.
EndMoves focus to the last day of the current month.
PageUpMoves focus to the same day of the month in the previous month.
PageDownMoves focus to the same day of the month in the next month.
EnterSelects the focused date and closes the date picker.
EscCloses the date picker without selecting any date.