--- title: DatePicker description: Allow users to select a specific date or date range. api_name: app-home source_url: html: >- https://shopify.dev/docs/api/app-home/polaris-web-components/forms/datepicker md: >- https://shopify.dev/docs/api/app-home/polaris-web-components/forms/datepicker.md --- # Date​Picker Allow users to select a specific date or date range. ## DatePicker * allow string Default: "" Dates that can be selected. A comma-separated list of dates, date ranges. Whitespace is allowed after commas. The default `''` allows all dates. * Dates in `YYYY-MM-DD` format allow a single date. * Dates in `YYYY-MM` format allow a whole month. * Dates in `YYYY` format allow a whole year. * Ranges are expressed as `start--end`. - Ranges are inclusive. * If either `start` or `end` is omitted, the range is unbounded in that direction. * If parts of the date are omitted for `start`, they are assumed to be the minimum possible value. So `2024--` is equivalent to `2024-01-01--`. * If parts of the date are omitted for `end`, they are assumed to be the maximum possible value. So `--2024` is equivalent to `--2024-12-31`. * Whitespace is allowed either side of `--`. * allowDays string Default: "" Days of the week that can be selected. These intersect with the result of `allow` and `disallow`. A comma-separated list of days. Whitespace is allowed after commas. The default `''` has no effect on the result of `allow` and `disallow`. Days are `sunday`, `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`. * defaultValue string Default: "" Default selected value. The default means no date is selected. If the provided value is invalid, no date is selected. * If `type="single"`, this is a date in `YYYY-MM-DD` format. * If `type="multiple"`, this is a comma-separated list of dates in `YYYY-MM-DD` format. * If `type="range"`, this is a range in `YYYY-MM-DD--YYYY-MM-DD` format. The range is inclusive. * defaultView string Default month to display in `YYYY-MM` format. This value is used until `view` is set, either directly or as a result of user interaction. Defaults to the current month in the user's locale. * disallow string Default: "" Dates that cannot be selected. These subtract from `allow`. A comma-separated list of dates, date ranges. Whitespace is allowed after commas. The default `''` has no effect on `allow`. * Dates in `YYYY-MM-DD` format disallow a single date. * Dates in `YYYY-MM` format disallow a whole month. * Dates in `YYYY` format disallow a whole year. * Ranges are expressed as `start--end`. - Ranges are inclusive. * If either `start` or `end` is omitted, the range is unbounded in that direction. * If parts of the date are omitted for `start`, they are assumed to be the minimum possible value. So `2024--` is equivalent to `2024-01-01--`. * If parts of the date are omitted for `end`, they are assumed to be the maximum possible value. So `--2024` is equivalent to `--2024-12-31`. * Whitespace is allowed either side of `--`. * disallowDays string Default: "" Days of the week that cannot be selected. This subtracts from `allowDays`, and intersects with the result of `allow` and `disallow`. A comma-separated list of days. Whitespace is allowed after commas. The default `''` has no effect on `allowDays`. Days are `sunday`, `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`. * name string An identifier for the field that is unique within the nearest containing form. * type "single" | "range" Default: "single" * value string Default: "" Current selected value. The default means no date is selected. If the provided value is invalid, no date is selected. Otherwise: * If `type="single"`, this is a date in `YYYY-MM-DD` format. * If `type="multiple"`, this is a comma-separated list of dates in `YYYY-MM-DD` format. * If `type="range"`, this is a range in `YYYY-MM-DD--YYYY-MM-DD` format. The range is inclusive. * view string Displayed month in `YYYY-MM` format. `onViewChange` is called when this value changes. Defaults to `defaultView`. ## Events Learn more about [registering events](https://shopify.dev/docs/api/app-home/using-polaris-components#event-handling). * blur CallbackEventListener\ | null * change CallbackEventListener\ | null * focus CallbackEventListener\ | null * input CallbackEventListener\ | null * viewchange CallbackEventListener\ | null ### CallbackEventListener ```ts (EventListener & { (event: CallbackEvent): void; }) | null ``` ### CallbackEvent ```ts Event & { currentTarget: HTMLElementTagNameMap[T]; } ``` ### Examples * #### Code ##### jsx ```jsx ``` ##### html ```html ``` ## Examples Component examples ### Basic usage ### Examples * #### Single date selection ##### Description Demonstrates a date picker configured for selecting a single date with a default value and specific month view. ##### jsx ```jsx ``` ##### html ```html ``` * #### With date restrictions ##### Description Illustrates how to restrict date selection to a specific date range, preventing selection of past or future dates outside the allowed period. ##### jsx ```jsx ``` ##### html ```html ``` * #### Handling onChange callbacks ##### Description Demonstrates how to handle onChange callbacks for both single and range date pickers, showing how to extract and process the selected values. ##### jsx ```jsx const [dateRange, setDateRange] = useState('2024-01-01--2024-01-31'); const [orderNumber, setOrderNumber] = useState(''); const handleApplyFilters = () => { console.log('Applying filters:', { orderNumber, dateRange }); } return ( setOrderNumber(event.currentTarget.value)} /> setDateRange(event.currentTarget.value)} view="2024-01" /> Apply filters ) ``` ##### html ```html
Apply filters
``` * #### With quick date selection ##### Description Illustrates a date picker with quick preset buttons and onChange callback to capture user selections and update the displayed value. ##### jsx ```jsx const [value, setValue] = useState('2025-01-01--2025-01-31'); const last7Days = () => { setValue('2025-01-07--2025-01-13'); } const last30Days = () => { setValue('2024-12-14--2025-01-13'); } const thisMonth = () => { setValue('2025-01-01--2025-01-31'); } return ( Last 7 days Last 30 days This month { console.log('Date range changed:', event.currentTarget.value); setValue(event.currentTarget.value); }} /> Selected range: {value} ) ``` ##### html ```html Last 7 days Last 30 days This month Selected range: 2025-01-01--2025-01-31 ```