startOfDay() と endOfDay() の使い方

日付処理でよく使われる便利な関数 startOfDay()endOfDay() について紹介します。

プログラムを書くとき、日付だけでデータを絞り込みたい場面って多いですよね。例えば「2025年8月21日の注文一覧を取得したい」というケース。でもデータベースに保存されているのは「2025-08-21 09:30:12」とか「2025-08-21 15:45:59」みたいに時刻まで含まれています。このまま比較すると、うまく1日の範囲を指定できず、データを取りこぼしたり余計に取得してしまうことがあります。
そこで役立つのが startOfDay()endOfDay() です。

  • startOfDay(date) は指定した日付の「1日の始まり(00:00:00)」を返します。
  • endOfDay(date) はその日の「1日の終わり(23:59:59.999)」を返します。

例えば new Date(2025, 7, 21, 15, 30, 45) を渡した場合、startOfDay() は「2025-08-21T00:00:00.000Z」を、endOfDay() は「2025-08-21T23:59:59.999Z」を返してくれます。つまり、どの時刻を渡しても確実にその日の最初と最後を取得できるわけです。

実務ではどう使うかというと、データベースから「ある日の全注文」を取得するようなクエリで活躍します。startOfDay()endOfDay() で検索範囲を作り、between で指定するだけで、その日に作成された全レコードをもれなく取り出せます。

まとめると、

  • startOfDay() → その日の始まりにリセット
  • endOfDay() → その日の終わりにリセット

この2つを押さえておけば、日付でのデータ処理が格段に楽になります。開発ではちょっとした違いがバグやデータの取りこぼしにつながるので、ぜひ意識して使ってみてください。