В Moment.js получение дня месяца относится к работе с календарной
датой и реализуется через метод date(). Этот метод
возвращает числовое значение от 1 до 31, соответствующее текущему дню
месяца в объекте Moment.
Ключевой момент заключается в разграничении понятий:
Moment.js использует разные методы для этих сущностей, и их смешение приводит к логическим ошибкам в обработке дат.
date()Основной способ получения номера дня месяца:
const m = moment('2026-05-21');
const dayOfMonth = m.date();
console.log(dayOfMonth); // 21
Метод date() не требует параметров при чтении значения и
возвращает текущий день месяца объекта Moment.
get('date')Moment.js поддерживает универсальный доступ к компонентам даты через
метод get:
const m = moment('2026-05-21');
const dayOfMonth = m.get('date');
console.log(dayOfMonth); // 21
Функционально результат идентичен date(), однако
get() применяется в случаях, когда требуется динамическое
обращение к различным полям даты через строковый ключ.
Метод date() также используется для изменения дня
месяца:
const m = moment('2026-05-21');
m.date(10);
console.log(m.format('YYYY-MM-DD')); // 2026-05-10
Изменение значения корректирует дату с учётом особенностей календаря. При установке значения, превышающего количество дней в месяце, Moment.js автоматически нормализует дату.
Moment.js выполняет автоматическую коррекцию:
const m = moment('2026-01-31');
m.date(40);
console.log(m.format('YYYY-MM-DD')); // 2026-02-09
Значение 40 выходит за пределы января, поэтому происходит перенос в следующий месяц с сохранением остатка дней.
date() от
day()Одна из наиболее частых ошибок — использование day()
вместо date().
const m = moment('2026-05-21');
console.log(m.date()); // 21
console.log(m.day()); // 4 (день недели)
day() возвращает индекс дня недели:
Таким образом, day() не имеет отношения к числу месяца и
используется для работы с недельным циклом.
Для отображения дня месяца применяется токен DD или
D:
const m = moment('2026-05-05');
console.log(m.format('D')); // 5
console.log(m.format('DD')); // 05
Разница заключается в ведущем нуле:
D — без ведущего нуляDD — фиксированная двухзначная формаКомбинация методов часто используется при работе с календарными интерфейсами и вычислениями:
const m = moment();
const currentDay = m.date();
const nextDay = moment(m).date(currentDay + 1);
console.log(nextDay.format('YYYY-MM-DD'));
Такой подход позволяет безопасно создавать новые даты без мутации исходного объекта.
Moment.js мутирует исходный объект при вызове date(n),
поэтому для сохранения неизменности используется клонирование:
const m1 = moment('2026-05-21');
const m2 = m1.clone().date(1);
console.log(m1.format('YYYY-MM-DD')); // 2026-05-21
console.log(m2.format('YYYY-MM-DD')); // 2026-05-01
Клонирование предотвращает побочные эффекты при цепочках преобразований дат.
Извлечение дня месяца часто используется вместе с другими методами:
const m = moment('2026-05-21');
const result = {
year: m.year(),
month: m.month() + 1,
day: m.date()
};
Важно учитывать, что month() возвращает значение от 0 до
11, что требует корректировки при выводе.