День недели

В библиотеке Moment.js предусмотрено несколько способов работы с днями недели. Основные методы позволяют:

  • получить номер дня недели;
  • установить конкретный день;
  • работать с локалями;
  • учитывать ISO-стандарт;
  • форматировать названия дней.

Метод 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');

ISO-день недели

Метод isoWeekday()

ISO-стандарт использует другую систему нумерации:

День ISO-значение
Понедельник 1
Вторник 2
Среда 3
Четверг 4
Пятница 5
Суббота 6
Воскресенье 7

Пример:

const date = moment('2025-03-15');

console.log(date.isoWeekday());

Результат:

6

Изменение ISO-дня

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'));

Работа с ISO-нумерацией

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);

Генерация ISO-недели

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();  // День месяца

Неверная ISO-нумерация

moment().isoWeekday(0);

Значение 0 для ISO-нумерации не используется.

Игнорирование локали

moment.locale('ru');

console.log(moment().weekday(0).format('dddd'));

Результат:

понедельник

При использовании weekday() всегда учитывается текущая локаль.