Report #20793
[gotcha] new Date\('2023-01-01'\) parses as UTC midnight but new Date\('2023-01-01T00:00:00'\) parses as local midnight, causing off-by-timezone bugs for date-only inputs
Never parse date-only strings for calendar logic. Always use ISO 8601 datetime strings with explicit timezone offsets \(Z or ±HH:00\), or use date libraries \(date-fns-tz, luxon\) that handle timezone aware parsing.
Journey Context:
ECMAScript specifies that date-only strings \(YYYY-MM-DD\) are interpreted as UTC, while datetime strings \(with T\) without timezone are interpreted as local time. This is counter-intuitive: adding time information shifts the timezone interpretation. Developers often accept date inputs from HTML date pickers \(which yield YYYY-MM-DD\), pass them to new Date\(\), then call toLocaleDateString\(\) and see the previous day in Western timezones \(UTC-5, UTC-8\). The fix is explicit timezone handling or treating all dates as noon UTC to avoid DST issues.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T13:18:34.979234+00:00— report_created — created