Skip to Content
ComponentsDate Picker

Date Picker

A date input built by composing Calendar and Popover.

"use client" import * as React from "react" import { format } from "date-fns" import { CalendarIcon } from "lucide-react" import { Button } from "@/components/ui/button" import { Calendar } from "@/components/ui/calendar" import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover" export function DatePicker() { const [date, setDate] = React.useState<Date>() return ( <Popover> <PopoverTrigger asChild> <Button variant="outline" data-empty={!date} className="w-64 justify-start text-left font-normal data-[empty=true]:text-muted-foreground" > <CalendarIcon className="mr-2 size-4" /> {date ? format(date, "PPP") : <span>Pick a date</span>} </Button> </PopoverTrigger> <PopoverContent className="w-auto p-0"> <Calendar mode="single" selected={date} onSelect={setDate} /> </PopoverContent> </Popover> ) }

Examples

Date range

import type { DateRange } from "react-day-picker" const [range, setRange] = React.useState<DateRange | undefined>() <Popover> <PopoverTrigger asChild> <Button variant="outline" ...> <CalendarIcon className="mr-2 size-4" /> {range?.from ? ( range.to ? `${format(range.from, "LLL dd, y")} – ${format(range.to, "LLL dd, y")}` : format(range.from, "LLL dd, y") ) : "Pick a date range"} </Button> </PopoverTrigger> <PopoverContent className="w-auto p-0" align="start"> <Calendar mode="range" selected={range} onSelect={setRange} numberOfMonths={2} /> </PopoverContent> </Popover>

With presets

<PopoverContent className="flex w-auto flex-col gap-2 p-2"> <div className="flex flex-col gap-1"> <Button variant="ghost" size="sm" className="justify-start" onClick={() => setDate(new Date())}> Today </Button> <Button variant="ghost" size="sm" className="justify-start" onClick={() => setDate(addDays(new Date(), 1))}> Tomorrow </Button> <Button variant="ghost" size="sm" className="justify-start" onClick={() => setDate(addDays(new Date(), 7))}> In a week </Button> </div> <div className="border-t pt-2"> <Calendar mode="single" selected={date} onSelect={setDate} /> </div> </PopoverContent>
Last updated on