JavaScriptの日付とタイムゾーン

JavaScriptのDateで起きやすい日付とタイムゾーンのずれ、月の数え方、日付文字列の解釈の違いなど、計算で間違えやすい点をまとめます。

日付の文字列は解釈が違う

new Date('2026-10-10')は日付のみの形式で、UTCとして解釈されます。時刻まで書いた'2026-10-10T00:00'は端末のローカル時間になります。この違いが、日付のずれの原因になります。

月は0始まり

getMonth()は0〜11を返します。月末の日は、new Date(年,月+1,0).getDate()で求められます。

日数の差は、UTCで計算する

夏時間のある地域では、1日が24時間でない日があります。日数の差は、Date.UTCで揃えてから計算すると安全です。表示にはIntl.DateTimeFormatとtimeZone:'Asia/Tokyo'などを使います。

この技術を使っているツール

ほか2本のツールでも使っています。