日付計算の方法 — 差分・加算・営業日カウントのJavaScript実装
日付計算はWebアプリ開発でよく必要になる処理です。2つの日付の差分・期限の計算・営業日(土日祝日除外)のカウントなど、日付操作には様々な落とし穴があります。
日付差分の計算
2つの日付の差分はDate.getTime()の差をミリ秒で求め、日数に換算(÷86400000)します。JavaScriptのDateオブジェクトはタイムゾーンの影響を受けるため、異なるタイムゾーン間での計算には注意が必要です。Date Calculator(差分モード)では2つの日付を選ぶだけで年/月/日/時間の差分を正確に計算します。
日数加算と期限計算
特定の日付から「30日後」「3ヶ月後」を求めるには注意が必要です。30日加算はDate.setDate(date.getDate() + 30)で求まりますが、月をまたぐ場合や月末日の扱いに気をつける必要があります。「3ヶ月後」はDate.setMonth(date.getMonth() + 3)ですが、3月31日の3ヶ月後は6月31日(存在しない)になるため、月によって結果が変わります。
営業日カウント
営業日計算では土曜・日曜を除外します。日本では祝日も除外する必要があり、祝日データを別途管理する必要があります。Date Calculatorの営業日モードでは土日を自動除外してカウントします。「5営業日以内に発送」のような納期計算や「20営業日後の期限日」の算出に使えます。
タイムゾーンと日付フォーマット
UTCとJSTでは9時間の差があります。サーバーがUTCで動作している場合、フロントエンドで日付を表示する際にはタイムゾーン変換が必要です。JavaScriptのIntl.DateTimeFormatやdate-fnsのformat関数でロケール別の日付フォーマット(YYYY/MM/DD・MM/DD/YYYY等)を指定できます。Date Calculatorでは結果を各フォーマットでコピーできます。