Condividi tramite


$dateDiff

L'operatore $dateDiff calcola la differenza tra due date in diverse unità, ad esempio anni, mesi, giorni e così via. È utile per determinare la durata tra due timestamp nel set di dati.

Sintassi

$dateDiff: {
   startDate: <expression>,
   endDate: <expression>,
   unit: <string>,
   timezone: <string>, // Optional
   startOfWeek: <string> // Optional
}

Parametri

Descrizione
startDate Data di inizio per il calcolo.
endDate Data di fine per il calcolo.
unit Unità di tempo per misurare la differenza. I valori validi includono: year, quartermonth, week, day, hour, minute, second. millisecond
timezone Facoltativo. Fuso orario da utilizzare per il calcolo.
startOfWeek Facoltativo. Giorno iniziale della settimana. I valori validi sono: Sunday, TuesdayMonday, Wednesday, Thursday, , Friday, . Saturday

Esempio

Calcolare la differenza in giorni tra le date di inizio e di fine degli eventi promozionali:

db.collection.aggregate([
  {
    $project: {
      eventName: 1,
      startDate: {
        $dateFromParts: {
          year: "$promotionEvents.promotionalDates.startDate.Year",
          month: "$promotionEvents.promotionalDates.startDate.Month",
          day: "$promotionEvents.promotionalDates.startDate.Day"
        }
      },
      endDate: {
        $dateFromParts: {
          year: "$promotionEvents.promotionalDates.endDate.Year",
          month: "$promotionEvents.promotionalDates.endDate.Month",
          day: "$promotionEvents.promotionalDates.endDate.Day"
        }
      },
      durationInDays: {
        $dateDiff: {
          startDate: {
            $dateFromParts: {
              year: "$promotionEvents.promotionalDates.startDate.Year",
              month: "$promotionEvents.promotionalDates.startDate.Month",
              day: "$promotionEvents.promotionalDates.startDate.Day"
            }
          },
          endDate: {
            $dateFromParts: {
              year: "$promotionEvents.promotionalDates.endDate.Year",
              month: "$promotionEvents.promotionalDates.endDate.Month",
              day: "$promotionEvents.promotionalDates.endDate.Day"
            }
          },
          unit: "day"
        }
      }
    }
  }
])