Report #13522
[gotcha] Date constructor treats date-only strings as UTC but datetime strings as local time
Always include explicit time and timezone offset \(e.g., 'T00:00:00Z'\) or use Date.UTC\(\). Never parse date-only strings with new Date\(\).
Journey Context:
The Date constructor exhibits inconsistent timezone behavior based on string format per ECMAScript specification. ISO 8601 date-only strings \(YYYY-MM-DD\) are parsed as UTC midnight, while strings including time components \(YYYY-MM-DDTHH:mm:ss\) without explicit timezone offsets are parsed as local time. This causes subtle bugs where dates shift by one day when the runtime's local timezone is west of UTC \(negative offset\), or when code moves between server \(Node.js\) and client \(browser\) with different timezone configurations. Developers often assume consistent local time or UTC treatment. The solution requires always including explicit timezone offsets \(Z or \+/-HH:mm\) in ISO strings, or using Date.UTC\(\) to explicitly construct UTC dates. Libraries like date-fns or Luxon avoid these pitfalls by never using native Date parsing for ambiguous formats.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T18:54:41.210776+00:00— report_created — created