В библиотеке Moment.js предусмотрено несколько способов работы с днями недели. Основные методы позволяют:
day()Метод day() возвращает номер дня недели:
const moment = require('moment');
const date = moment('2025-03-15');
console.log(date.day());
Результат:
6
Нумерация начинается с воскресенья:
| День | Значение |
|---|---|
| Воскресенье | 0 |
| Понедельник | 1 |
| Вторник | 2 |
| Среда | 3 |
| Четверг | 4 |
| Пятница | 5 |
| Суббота | 6 |
Метод day() также позволяет изменять день недели:
const date = moment('2025-03-12');
date.day(0);
console.log(date.format('YYYY-MM-DD'));
Результат:
2025-03-09
Moment.js автоматически перемещает дату к ближайшему указанному дню недели в рамках текущей недели.
Вместо чисел можно использовать названия дней:
const date = moment();
date.day('Monday');
console.log(date.format('YYYY-MM-DD'));
Поддерживаются полные и сокращённые названия:
date.day('Mon');
date.day('Tuesday');
date.day('Fri');
isoWeekday()ISO-стандарт использует другую систему нумерации:
| День | ISO-значение |
|---|---|
| Понедельник | 1 |
| Вторник | 2 |
| Среда | 3 |
| Четверг | 4 |
| Пятница | 5 |
| Суббота | 6 |
| Воскресенье | 7 |
Пример:
const date = moment('2025-03-15');
console.log(date.isoWeekday());
Результат:
6
const date = moment('2025-03-12');
date.isoWeekday(1);
console.log(date.format('YYYY-MM-DD'));
Результат:
2025-03-10
format()Moment.js поддерживает различные шаблоны форматирования.
const date = moment('2025-03-15');
console.log(date.format('dddd'));
Результат:
Saturday
console.log(date.format('ddd'));
Результат:
Sat
console.log(date.format('dd'));
Результат:
Sa
require('moment/locale/ru');
moment.locale('ru');
const date = moment('2025-03-15');
console.log(date.format('dddd'));
Результат:
суббота
Сокращённая форма:
console.log(date.format('ddd'));
Результат:
сб
const today = moment();
console.log(today.format('dddd'));
Пример результата:
Thursday
const today = moment();
const day = today.day();
const isWeekend = day === 0 || day === 6;
console.log(isWeekend);
const today = moment();
const day = today.day();
const isWorkDay = day >= 1 && day <= 5;
console.log(isWorkDay);
const date = moment();
if (date.day() === 1) {
console.log('Понедельник');
}
const day = moment().day();
if (day === 0 || day === 6) {
console.log('Выходной');
}
const nextMonday = moment().day(8);
console.log(nextMonday.format('YYYY-MM-DD'));
Если передать число больше 6, Moment.js автоматически переходит на следующую неделю.
const prevSunday = moment().day(-7);
console.log(prevSunday.format('YYYY-MM-DD'));
const nextIsoMonday = moment().isoWeekday(8);
console.log(nextIsoMonday.format('YYYY-MM-DD'));
weekdays()console.log(moment.weekdays());
Результат:
[
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
]
console.log(moment.weekdaysShort());
Результат:
[
'Sun',
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat'
]
console.log(moment.weekdaysMin());
Результат:
[
'Su',
'Mo',
'Tu',
'We',
'Th',
'Fr',
'Sa'
]
После установки локали:
moment.locale('ru');
console.log(moment.weekdays());
Результат:
[
'воскресенье',
'понедельник',
'вторник',
'среда',
'четверг',
'пятница',
'суббота'
]
Часто требуется сортировать данные с учётом порядка дней недели.
const days = [
'Wednesday',
'Monday',
'Friday',
'Sunday'
];
days.sort((a, b) => {
return moment().day(a).day() - moment().day(b).day();
});
console.log(days);
Результат:
[
'Sunday',
'Monday',
'Wednesday',
'Friday'
]
const date = moment('2025-12-31');
console.log(date.format('dddd'));
Результат:
Wednesday
const date = moment('15.03.2025', 'DD.MM.YYYY');
console.log(date.day());
Результат:
6
В разных странах неделя начинается по-разному.
weekday()Метод weekday() учитывает локаль.
Для русской локали первым днём считается понедельник.
moment.locale('ru');
const date = moment();
console.log(date.weekday());
const date = moment();
date.weekday(0);
console.log(date.format('dddd'));
В русской локали будет установлен понедельник.
day(), weekday() и
isoWeekday()| Метод | Начало недели | Диапазон |
|---|---|---|
day() |
Воскресенье | 0–6 |
weekday() |
Зависит от локали | 0–6 |
isoWeekday() |
Понедельник | 1–7 |
Иногда удобнее использовать форматирование вместо числовых значений.
const date = moment();
if (date.format('dddd') === 'Friday') {
console.log('Сегодня пятница');
}
Для локализованных приложений предпочтительнее использовать числовые методы, поскольку текстовые значения зависят от установленной локали.
const now = moment();
switch (now.isoWeekday()) {
case 1:
console.log('Понедельник');
break;
case 2:
console.log('Вторник');
break;
case 3:
console.log('Среда');
break;
case 4:
console.log('Четверг');
break;
case 5:
console.log('Пятница');
break;
case 6:
case 7:
console.log('Выходной');
break;
}
const today = moment().isoWeekday();
const daysUntilWeekend = 6 - today;
console.log(daysUntilWeekend);
const start = moment().startOf('week');
const days = [];
for (let i = 0; i < 7; i++) {
days.push(
start.clone().add(i, 'days').format('dddd')
);
}
console.log(days);
const start = moment().startOf('isoWeek');
const days = [];
for (let i = 0; i < 7; i++) {
days.push(
start.clone().add(i, 'days').format('dddd')
);
}
console.log(days);
day() и
date()moment().day(); // День недели
moment().date(); // День месяца
moment().isoWeekday(0);
Значение 0 для ISO-нумерации не используется.
moment.locale('ru');
console.log(moment().weekday(0).format('dddd'));
Результат:
понедельник
При использовании weekday() всегда учитывается текущая
локаль.