Timezone-safe date formatting utilities providing a single source of truth for consistent date display across the application. All functions parse ISO date strings via string splitting to avoid `new Date()` UTC-to-local timezone shifts. ## Key Components | Export | Output Example | Use Case | |--------|---------------|----------| | `formatReleaseDate` | `"November 11, 2025"` | Release dates, long-form display | | `formatDateShort` | `"Jan 5, 2025"` | Admin cards (waitlist, publication, media, investor, campaign) | | `formatDateSlashUTC` | `"11/11/2025"` | Product release & customer interview cards | **Internal helper:** `splitYmd(dateString)` — splits ISO date/datetime strings into `[year, month, day]` without constructing a `Date` object, preventing the off-by-one day bug west of UTC. ## Usage Example ```typescript import { formatReleaseDate, formatDateShort, formatDateSlashUTC } from './date-formatters' // ISO date-only string formatReleaseDate('2025-11-11') // → "November 11, 2025" formatDateShort('2025-01-05') // → "Jan 5, 2025" formatDateSlashUTC('2025-11-11') // → "11/11/2025" // ISO datetime strings also work (time component is ignored) formatDateShort('2025-06-20T14:30:00Z') // → "Jun 20, 2025" ``` > **Why not `new Date()`?** Passing `"2025-11-11"` to `new Date()` creates a UTC midnight timestamp. In timezones west of UTC, `.getMonth()` / `.getDate()` resolve to the *previous* day. String splitting eliminates this class of bug entirely.