Skip to component content
Input038 / 155

DatePicker

Choose a date with a localized calendar and browser-language preferences.

Example
Source
DatePicker.tsxtsx
import { useState } from "react";
import { DatePicker, Picker, Text, VStack } from "@/ohmygui";

type PickerMode = "date" | "time" | "datetime-local";

export default function Example() {
  const [locale, setLocale] = useState("it-IT");
  const [mode, setMode] = useState<PickerMode>("date");
  const [values, setValues] = useState<Record<PickerMode, string>>({
    date: "2026-10-19",
    time: "09:30",
    "datetime-local": "2026-10-19T09:30",
  });
  return (
    <VStack gap="md" align="start">
      <Picker
        label="Input mode"
        value={mode}
        onChange={(event) => setMode(event.target.value as PickerMode)}
        items={[
          { value: "date", label: "Date · custom calendar" },
          { value: "time", label: "Time · native input" },
          { value: "datetime-local", label: "Date and time · native input" },
        ]}
      />
      {mode === "date" && (
        <Picker
          label="Calendar language"
          value={locale}
          onChange={(event) => setLocale(event.target.value)}
          items={[
            { value: "en-US", label: "English" },
            { value: "it-IT", label: "Italiano" },
          ]}
        />
      )}
      <DatePicker
        label={mode === "date" ? "Project start" : mode === "time" ? "Meeting time" : "Project start date and time"}
        name="startDate"
        mode={mode}
        locale={locale}
        value={values[mode]}
        onValueChange={(value) => setValues((current) => ({ ...current, [mode]: value }))}
        min={mode === "date" ? "2026-01-01" : undefined}
        max={mode === "date" ? "2027-12-31" : undefined}
      />
      <Text variant="metadata" color="muted">
        Form value · {values[mode] || "No value selected"}
      </Text>
    </VStack>
  );
}