Получение количества дней в месяце

Работа с датами и временем является одной из наиболее частых задач в разработке на JavaScript. Библиотека Moment.js значительно упрощает эти операции, предоставляя удобные методы для манипуляций с датами. Одной из типичных потребностей является определение количества дней в конкретном месяце, учитывая високосные годы и различия между месяцами.

Метод daysInMonth()

Основным инструментом для получения количества дней в месяце является метод daysInMonth(). Он вызывается на объекте Moment и возвращает целое число, представляющее количество дней в текущем месяце объекта.

const moment = require('moment');

let date = moment('2026-05-21'); // Создание объекта Moment для 21 мая 2026 года
let days = date.daysInMonth();   // Получение количества дней в мае
console.log(days);               // 31

Ключевые моменты метода daysInMonth():

  • Возвращаемое значение всегда число (Number).
  • Метод учитывает високосные годы при расчёте февраля.
  • Не изменяет исходный объект Moment; возвращает только число дней.

Пример для февраля високосного года

Февраль является особенным месяцем, так как количество дней может быть 28 или 29 в зависимости от года:

let leapYear = moment('2024-02-01');
console.log(leapYear.daysInMonth()); // 29

let nonLeapYear = moment('2023-02-01');
console.log(nonLeapYear.daysInMonth()); // 28

Метод корректно определяет високосный год и возвращает соответствующее количество дней.

Получение дней для текущего месяца

Если требуется узнать, сколько дней в текущем месяце, можно создать объект Moment без параметров:

let currentMonthDays = moment().daysInMonth();
console.log(currentMonthDays);

Это автоматически учитывает текущий год и месяц на момент выполнения скрипта.

Использование с динамическими месяцами и годами

Для получения количества дней в любом произвольном месяце можно комбинировать метод moment() с указанием года и месяца:

function getDaysInMonth(year, month) {
    // Месяцы в Moment.js индексируются с 0 (январь) до 11 (декабрь)
    return moment({ year: year, month: month }).daysInMonth();
}

console.log(getDaysInMonth(2026, 4)); // Май 2026, 31 день
console.log(getDaysInMonth(2023, 1)); // Февраль 2023, 28 дней

Обратите внимание, что месяцы индексируются с нуля, что часто вызывает ошибки при прямом указании числа месяца.

Сочетание с другими методами Moment.js

Метод daysInMonth() особенно полезен в сочетании с другими методами для расчётов:

  • Определение последнего дня месяца:
let endOfMonth = moment('2026-05-21').endOf('month');
console.log(endOfMonth.format('YYYY-MM-DD')); // 2026-05-31
  • Построение календарей:

Количество дней в месяце можно использовать для генерации таблиц дней, проверок валидности дат и циклов для перебора дней месяца.

let month = moment('2026-05-01');
let totalDays = month.daysInMonth();

for (let day = 1; day <= totalDays; day++) {
    console.log(day);
}

Преимущества использования daysInMonth()

  1. Точность: учитывает високосные годы и нестандартные длины месяцев.
  2. Простота: метод возвращает готовое число без необходимости сложных вычислений.
  3. Совместимость: работает с объектами Moment, что облегчает интеграцию с другими функциями библиотеки.

Вывод

Метод daysInMonth() является ключевым инструментом для получения количества дней в месяце при работе с Moment.js. Он удобен для динамического определения числа дней, корректно обрабатывает високосные годы и может быть использован в широком спектре задач — от генерации календарей до проверки корректности введённых дат.