# Date Range

> Date range with start, end, and optional timezone.

- Name: `date-range`
- Categories: common
- Detail page: https://open-types.dev/types/date-range

## Install

```bash
# Types only
npx shadcn add @open-types/date-range

# Types + Zod v4 validators
npx shadcn add @open-types/date-range-zod

# Types + real-world examples
npx shadcn add @open-types/date-range-examples
```

## Types

```typescript
export interface DateRange {
  start: string;
  end: string;
  timezone?: string;
}
```

## Zod validator

```typescript
import * as z from "zod";
import type { DateRange } from "../types/date-range";

export const dateRangeSchema = z.object({
  start: z.string().min(1, { error: "Start date is required" }),
  end: z.string().min(1, { error: "End date is required" }),
  timezone: z.string().optional(),
}) satisfies z.ZodType<DateRange>;

export type { DateRange } from "../types/date-range";
```

## Examples

```typescript
// Source: hand-crafted
import type { DateRange } from "../types/date-range";

export const dateRangeExamples = {
  oneDay: {
    start: "2026-05-16T00:00:00Z",
    end: "2026-05-17T00:00:00Z",
  } satisfies DateRange,
  workWeek: {
    start: "2026-05-11T00:00:00Z",
    end: "2026-05-15T23:59:59Z",
    timezone: "America/New_York",
  } satisfies DateRange,
  quarter: {
    start: "2026-04-01T00:00:00Z",
    end: "2026-06-30T23:59:59Z",
    timezone: "UTC",
  } satisfies DateRange,
  dateOnly: { start: "2026-05-16", end: "2026-05-23" } satisfies DateRange,
  withTokyoTz: {
    start: "2026-05-16T09:00:00+09:00",
    end: "2026-05-16T17:00:00+09:00",
    timezone: "Asia/Tokyo",
  } satisfies DateRange,
} as const;
```
