
JavaScriptのDateはなぜ扱いづらいのか
CRANK
はじめにREADYFOR でプロダクトエンジニアをやっている pxfnc(ぴくすふぁんく) です。本記事は READYFOR Advent Calendar 2024 の 19 日目 の記事です。JavaScriptの言語仕様にも含まれているDateオブジェクトの扱いは、他の言語の日付時刻処理と比べてたいへん扱いづらいことで有名です(多分)。そのため、外部ライブラリとしてMoment.js date-fnsや、新しいものだとluxon、標準としてIntl.DateTimeFormat や、日付時刻を扱うためのTemporalのプロポーザルもある状態で、みんなかなり苦しんでいるような状況かと思います。このように現時点でも多くのソリューションがありますが、そもそもDateは何なのか、どうして扱いづらいのか、という点をJavaScript初心者の方や、バックエンドエンジニアの方に知っていただくために、この記事を書くことにしました。JavaScriptのDateオブジェクトが表すものMDNのドキュメントでは下記のような説明があります。JavaScript の Date オブジェクトは、単一の瞬間の時刻をプラットフォームに依存しない形式で表します。Date オブジェクトは、1970 年 1 月 1 日午前 0 時 (UTC)(元期)からのミリ秒を表す整数値をカプセル化しています。 date…