Date Ranges and Recurrence
Problem
Calendar views and schedules need lazy zoned sequences that advance safely across DST changes.
Solution
Use dateRange() for bounded ranges and recurrence() for count- or date-limited schedules.
ts
import { dateRange, parse, recurrence } from '@vielzeug/tempo';
const start = parse('2026-03-01T09:00:00[America/New_York]', { as: 'zonedDateTime' });
const end = parse('2026-03-03T09:00:00[America/New_York]', { as: 'zonedDateTime' });
const days = [...dateRange(start, end, { days: 1 })];
const fortnightly = [...recurrence(start, { count: 4, frequency: 'weekly', interval: 2 })];Pitfalls
dateRange()rejects steps that do not advance time.recurrence()requires a positive safe-integer interval and a non-negative safe-integer count.- Pass
timeZonewhen the starting value is plain or an instant.