--- title: DatePicker description: Allow users to select a specific date or date range. api_version: 2026-01 api_name: admin-extensions source_url: html: >- https://shopify.dev/docs/api/admin-extensions/latest/polaris-web-components/forms/datepicker md: >- https://shopify.dev/docs/api/admin-extensions/latest/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 ### Examples * #### Code ##### jsx ```jsx ``` ##### html ```html ``` * #### 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 ``` ## Best practices * Use smart defaults and highlight common selections * Don't use to enter a date that is many years in the future or the past