Поделиться через


$dateDiff

Оператор $dateDiff вычисляет разницу между двумя датами в различных единицах, таких как годы, месяцы, дни и т. д. Это полезно для определения длительности между двумя метками времени в наборе данных.

Синтаксис

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

Параметры

Описание
startDate Дата начала вычисления.
endDate Дата окончания вычисления.
unit Единица времени для измерения разницы. Допустимые значения: year, quarter, monthweekdayhourminute, . secondmillisecond
timezone Необязательно. Часовой пояс, используемый для вычисления.
startOfWeek Необязательно. Начальный день недели. Допустимые значения: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday. Saturday

Пример

Вычислите разницу в днях между датами начала и окончания рекламных мероприятий:

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"
        }
      }
    }
  }
])