DatePicker
The <DatePicker>
component is a user interface element that allows users to select a date from a calendar.
The typical practice is to provide a date picker and when you click on calendar button it pops up a calendar below the date field, allowing the user to populate the field with an appropriate date.
Anatomy
The Label defines the purpose of the Date Field, where users can enter a date directly. Tapping the Calendar Button opens a calendar view with a Header for selecting the month and year, and Next/Previous Buttons for easy month navigation.

Appearance
The appearance of a component can be customized using the variant
and size
props. These props adjust the visual style and dimensions of the component, available values are based on the active theme.
Property | Type | Description |
---|---|---|
variant | - | The available variants of this component. |
size | - | The available sizes of this component. |
Usage
<DatePicker>
is used when you need users to select a date accurately, like for booking events, scheduling appointments, or setting deadlines. It’s ideal when date formats might vary, as it standardizes input and reduces mistakes because its visual clarity, format consistency and accuracy. DatePickers are also helpful when users might need guidance on valid date ranges, like selecting only future dates for reservations. Avoid using it for casual date entries where a simple text field would suffice.
Basic Usage (uncontrolled)
This example shows a regular <DatePicker>
without any special props.
Min/Max Values
The minValue
and maxValue
props are used to perform built-in validation. This prevents the user from selecting dates outside the valid range in the calendar .
Controlled
The value
and onChange
props can be used to control the DatePicker
.
Current Selected Date: Day: 29 Month: 10 Year: 2023
Using a Date Object
When using a datepicker, relying on the standard JavaScript Date
object for its value can result in timezone inconsistencies and incorrect date display. That's why the datepicker uses a specific DateValue
type from @internationalized/date instead. This library handles correct international date manipulation across calendars, time zones, and other localization concerns.
@internationalized/date
is a peer dependency. If it's not already in your
project, you'll need to install it.
The simplest way to parse a Date for the datepicker is by using parseAbsoluteToLocal
. This function converts an absolute date and time into the current user's local time zone.
If you're already using a date library like date-fns, you can also utilizing parseDate
. Ensure that you only pass the date part to parseDate
, excluding the time and timezone information.
Props
aria-describedby?
string;
aria-details?
string;
aria-label?
string;
aria-labelledby?
string;
autoFocus?
boolean;
children?
ReactNode |
((values: DatePickerRenderProps & { defaultChildren: ReactNode }) => ReactNode);
dateUnavailable?
(date: DateValue) => boolean;
defaultOpen?
boolean;
defaultValue?
DateValue | null;
description?
ReactNode;
disabled?
boolean;
true
, the date picker is disabled."false"
error?
boolean;
true
, the field is considered invalid and if set the errorMessage is shown instead of the description
."false"
errorMessage?
ReactNode | ((v: ValidationResult) => ReactNode);
firstDayOfWeek?
"sun" | "mon" | "tue" | "wed" | "thu" | "fri" | "sat";
granularity?
Granularity;
"day"
for dates, and "minute"
for times."day"
hideTimeZone?
boolean;
"false"
hourCycle?
12 | 24;
id?
string;
label?
ReactNode;
maxValue?
DateValue | null;
minValue?
DateValue | null;
name?
string;
onBlur?
(e: FocusEvent<Element, Element>) => void;
onChange?
(value: DateValue | null) => void;
onFocus?
(e: FocusEvent<Element, Element>) => void;
onFocusChange?
(isFocused: boolean) => void;
onKeyDown?
(e: KeyboardEvent) => void;
onKeyUp?
(e: KeyboardEvent) => void;
onOpenChange?
(isOpen: boolean) => void;
open?
boolean;
"false"
pageBehavior?
PageBehavior;
"visible"
placeholderValue?
DateValue | null;
readOnly?
boolean;
true
, the date picker is readOnly."false"
ref?
Ref<HTMLDivElement>;
ref.current
to null
(or call the ref with null
if you passed a callback ref).
@see {@link https://react.dev/learn/referencing-values-with-refs#refs-and-the-dom React Docs}required?
boolean;
true
, the date picker is required."false"
shouldCloseOnSelect?
boolean | (() => boolean);
"true"
shouldForceLeadingZeros?
boolean;
slot?
string | null;
null
value indicates that the local props completely override all props received from a parent.validate?
(value: DateValue) => true | ValidationError | null;
validationBehavior="native"
. For realtime validation, use the isInvalid
prop instead.validationBehavior?
"native" | "aria";
'native'
value?
DateValue | null;
width?
WidthProp;
Alternative components
DateField: Allows users to input a date directly.