Освоение вычислений дат в MongoDB: подсчет дней, месяцев и лет между датами

В MongoDB работа с датами и выполнение вычислений между ними — обычная задача. Если вам нужно определить количество дней, месяцев или лет между двумя датами, MongoDB предоставляет несколько методов, которые упрощают эти вычисления. В этой статье блога мы рассмотрим различные подходы к подсчету промежутка между датами, используя разговорный язык, и предоставим примеры кода для демонстрации каждого метода.

Метод 1: использование операторов $subtract и $divide
Чтобы вычислить разницу между двумя датами в миллисекундах, вы можете использовать оператор $subtract. Затем, разделив результат на соответствующие миллисекунды в дне, месяце или году, вы можете получить желаемую продолжительность. Вот пример:

db.collection.aggregate([
  {
    $project: {
      durationInDays: {
        $divide: [{ $subtract: ["$endDate", "$startDate"] }, 86400000]
      },
      durationInMonths: {
        $divide: [{ $subtract: ["$endDate", "$startDate"] }, 2592000000]
      },
      durationInYears: {
        $divide: [{ $subtract: ["$endDate", "$startDate"] }, 31536000000]
      },
    }
  }
]);

Метод 2: использование библиотеки Moment.js
Если вы предпочитаете более гибкое и многофункциональное решение, вы можете использовать библиотеку Moment.js, популярную библиотеку манипулирования датами в JavaScript. Сначала обязательно установите Moment.js через npm или включите библиотеку в свой HTML-файл. Затем вы можете использовать его функции для выполнения вычислений дат. Вот пример:

const moment = require('moment');
const startDate = moment('2022-01-01');
const endDate = moment('2022-12-31');
const durationInDays = endDate.diff(startDate, 'days');
const durationInMonths = endDate.diff(startDate, 'months');
const durationInYears = endDate.diff(startDate, 'years');

Метод 3: использование функций даты.
MongoDB также предоставляет встроенные функции даты, которые могут быть полезны для расчета разницы дат. Функция $dateDiffпозволяет вычислить разницу между двумя датами в определенной единице измерения, например «день», «месяц» или «год». Вот пример:

db.collection.aggregate([
  {
    $project: {
      durationInDays: {
        $dateDiff: {
          startDate: "$startDate",
          endDate: "$endDate",
          unit: "day"
        }
      },
      durationInMonths: {
        $dateDiff: {
          startDate: "$startDate",
          endDate: "$endDate",
          unit: "month"
        }
      },
      durationInYears: {
        $dateDiff: {
          startDate: "$startDate",
          endDate: "$endDate",
          unit: "year"
        }
      },
    }
  }
]);

В этой статье мы рассмотрели три различных метода расчета продолжительности между датами в MongoDB. Мы рассмотрели использование операторов $subtract и $divide, использование библиотеки Moment.js и встроенных функций даты. Каждый метод имеет свои преимущества, поэтому выберите тот, который лучше всего соответствует вашим конкретным требованиям. Освоив эти методы, вы сможете без труда выполнять вычисления дат в базе данных MongoDB.