$dateDiff (日付の差)

最終更新:2026-10-09

$dateDiff (日付の差)

$dateDiff は 2 つの日付の差を指定した単位の整数で計算します。年齢、契約期間、滞在時間などの計算に最適です。unit には year、month、week、day、hour、minute、second、millisecond を指定でき、結果は単位の境界で切り捨てられます(year は満年数のみを数えます)。startOfWeek は週の開始曜日を設定し、unit が week のときだけ適用されます。timezone は使用する暦を決定し、タイムゾーンをまたぐ場合は必ず設定してください。

カテゴリ日付
MongoDB バージョン5.0+
例の言語mongosh(シェル)

📝 構文

{ $dateDiff: { startDate: <date-expression>, endDate: <date-expression>, unit: <unit>, timezone: <timezone>, startOfWeek: <week-start> } }

⚙️ パラメータ

startDate / endDate必須。開始日と終了日。
unit必須。差の単位(上記8つの単位)。
timezone計算に使用する任意のタイムゾーン。
startOfWeek任意。unit が week の場合のみ適用。Monday、Sunday などの値。

戻り値:整数の差(endDate から startDate を減算)。いずれかの日付が null の場合は null。

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $dateDiff: 年齢を年単位で計算
 db.users.aggregate([
  { $project: {
      ageYears: { $dateDiff: { startDate: '$birthDate', endDate: '$$NOW', unit: 'year' } }
  } }
])

出力:

{ "_id": 1, "ageYears": 28 }
{ "_id": 2, "ageYears": 31 }

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q結果に小数は含まれますか?
Aいいえ。$dateDiff は整数を返し、単位の境界で切り捨てられます。
Q差は負になりますか?
Aはい。endDate が startDate より前だと負になります。
Q2 つの日付の間の日数を数えるには?
Aunit を day に設定します。タイムゾーンによって暦上の日の境界が変わる点に注意してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%