Moment.js предоставляет набор инструментов для работы с датами, где одна из ключевых задач — корректное определение и манипуляция днём недели. В JavaScript эта тема осложняется различиями в индексах, локалях и форматах отображения, поэтому библиотека вводит несколько согласованных методов для унификации поведения.
Основной метод для получения дня недели:
moment().day();
Он возвращает число от 0 до 6, где:
Такой подход соответствует стандарту JavaScript
Date.getDay(), но в рамках Moment.js он интегрирован в
цепочку методов и поддерживает работу с локалями и изменением
значения.
Пример:
const m = moment("2026-05-21");
console.log(m.day()); // например, 4 (четверг)
Метод day() является перегруженным: он не только
возвращает значение, но и изменяет его.
moment().day(0); // установка на воскресенье
moment().day(1); // понедельник
При изменении дня недели библиотека автоматически пересчитывает дату, сохраняя текущую неделю:
const m = moment("2026-05-21"); // четверг
m.day(1); // перенос на понедельник той же недели
Если текущее значение дня недели больше целевого, дата смещается назад; если меньше — вперёд.
В европейских стандартах неделя начинается с понедельника, а воскресенье имеет значение 7. Для этого используется:
moment().isoWeekday();
Значения:
Пример получения:
const m = moment("2026-05-21");
console.log(m.isoWeekday()); // 4 (четверг)
Установка:
m.isoWeekday(1); // установить понедельник
Существует ещё один метод:
moment().weekday();
Он похож на day(), но учитывает локальные настройки
первого дня недели.
day() — всегда фиксированная схема 0–6 (воскресенье →
суббота)weekday() — зависит от локали (например, в Европе
неделя начинается с понедельника)Пример:
moment.locale('ru');
const m = moment("2026-05-21");
m.weekday(); // значение относительно локальной недели
m.day(); // фиксированное значение
Одно из сильных мест Moment.js — локализация:
moment.locale('ru');
const m = moment();
console.log(m.format('dddd')); // "четверг"
console.log(m.format('ddd')); // "чт"
Форматы:
ddd — сокращённое название дняdddd — полное название дняЭто важно при построении интерфейсов, где требуется отображение дней недели в человекочитаемом виде.
Часто требуется получить первый день недели:
moment().startOf('week');
По умолчанию это воскресенье, но зависит от локали:
moment.locale('ru');
moment().startOf('week'); // понедельник
Аналогично для ISO-недели:
moment().startOf('isoWeek'); // всегда понедельник
const data = [
"2026-05-19",
"2026-05-20",
"2026-05-21"
];
const grouped = {};
data.forEach(date => {
const m = moment(date);
const day = m.format('dddd');
if (!grouped[day]) grouped[day] = [];
grouped[day].push(date);
});
const m = moment("2026-05-21");
if (m.isoWeekday() === 5) {
// пятница
}
const m = moment();
m.isoWeekday(1);
При вычислениях календарных интервалов важно учитывать, как определяется неделя:
const start = moment().startOf('isoWeek');
const end = moment().endOf('isoWeek');
Это позволяет получить стабильный диапазон от понедельника до воскресенья независимо от локали отображения.
moment().day(7); // не ISO-система
moment().isoWeekday(7); // воскресенье в ISO
В Moment.js понедельник не равен 0 ни в одной стандартной системе.
moment.locale('en'); // неделя начинается с воскресенья
moment.locale('ru'); // неделя начинается с понедельника
Это влияет на weekday() и
startOf('week').
Часто требуется вывести день недели в разных форматах:
moment().format('d'); // 0-6
moment().format('dd'); // Su, Mo...
moment().format('ddd'); // сокращённое имя
moment().format('dddd'); // полное имя
Moment.js предлагает три уровня работы с днями недели:
Такое разделение позволяет точно управлять календарной логикой в любых сценариях: от простых интерфейсов до сложных систем планирования и аналитики дат.