Работа с неделями играет важную роль в системах аналитики, календарях, отчётах, CRM, ERP и финансовых приложениях. Библиотека Moment.js предоставляет инструменты для получения и установки номера недели года, а также управления ISO-неделями.
week()Метод week() используется для:
const moment = require('moment');
const date = moment('2026-03-15');
console.log(date.week());
Результат:
11
Метод возвращает номер недели в году согласно локали.
При передаче аргумента week() изменяет дату так, чтобы
она соответствовала указанной неделе.
const moment = require('moment');
const date = moment();
date.week(20);
console.log(date.format('YYYY-MM-DD'));
Moment.js автоматически пересчитывает дату.
При установке недели:
date.week(1);
Moment.js:
Пример:
const date = moment('2026-08-19');
console.log(date.format('dddd')); // Wednesday
date.week(1);
console.log(date.format('YYYY-MM-DD dddd'));
Результат:
2025-12-31 Wednesday
Среда остаётся средой, но дата переносится в первую неделю года.
Метод week() зависит от локали.
В разных странах:
Пример установки русской локали:
moment.locale('ru');
const date = moment('2026-01-01');
console.log(date.week());
Для строгого международного стандарта используется ISO 8601.
Особенности ISO:
Для работы используются методы:
isoWeek()isoWeeks()isoWeek()const date = moment('2026-01-01');
console.log(date.isoWeek());
const date = moment();
date.isoWeek(10);
console.log(date.format('YYYY-MM-DD'));
week()
и isoWeek()week()Работает согласно текущей локали.
moment.locale('en');
moment().week();
isoWeek()Всегда использует ISO-стандарт.
moment().isoWeek();
Иногда требуется установить:
Пример:
const date = moment();
date.year(2026);
date.week(15);
date.day(1);
console.log(date.format('YYYY-MM-DD'));
В ISO-календаре год недели может отличаться от календарного года.
Например:
Для работы используются:
isoWeekYear()weekYear()isoWeekYear()const date = moment('2021-01-01');
console.log(date.isoWeekYear());
Результат:
2020
Хотя календарный год — 2021, ISO-неделя относится к 2020 году.
const date = moment();
date.isoWeekYear(2027);
console.log(date.format());
Очень распространённый сценарий — построение даты по:
Пример:
const date = moment();
date.week(25).day(3);
console.log(date.format('YYYY-MM-DD'));
weekday()Метод weekday() учитывает локаль.
const date = moment();
date.weekday(0);
В зависимости от региона:
isoWeekday()Для ISO-стандарта применяется isoWeekday().
Нумерация:
| День | Значение |
|---|---|
| Понедельник | 1 |
| Вторник | 2 |
| Среда | 3 |
| Четверг | 4 |
| Пятница | 5 |
| Суббота | 6 |
| Воскресенье | 7 |
Пример:
const date = moment();
date.isoWeek(12).isoWeekday(1);
console.log(date.format('YYYY-MM-DD'));
const start = moment().week(30).startOf('week');
console.log(start.format('YYYY-MM-DD'));
const end = moment().week(30).endOf('week');
console.log(end.format('YYYY-MM-DD HH:mm:ss'));
const start = moment()
.isoWeek(18)
.startOf('isoWeek');
const end = moment()
.isoWeek(18)
.endOf('isoWeek');
console.log(start.format());
console.log(end.format());
Moment.js автоматически корректирует значения.
Пример:
const date = moment();
date.week(60);
console.log(date.format());
Библиотека перенесёт дату на следующий год.
const date = moment();
date.week(-1);
console.log(date.format());
Moment.js выполнит перерасчёт относительно предыдущих недель.
Метод set() позволяет изменять неделю как часть набора
параметров.
const date = moment();
date.set({
week: 40
});
console.log(date.format());
startOf()const date = moment()
.isoWeek(8)
.startOf('isoWeek');
console.log(date.format());
const date = moment()
.week(8)
.startOf('week');
console.log(date.format());
function getWeekStart(year, week) {
return moment()
.year(year)
.week(week)
.startOf('week');
}
const result = getWeekStart(2026, 35);
console.log(result.format('YYYY-MM-DD'));
function buildISODate(year, week, weekday) {
return moment()
.isoWeekYear(year)
.isoWeek(week)
.isoWeekday(weekday);
}
const date = buildISODate(2026, 20, 1);
console.log(date.format('YYYY-MM-DD'));
weeksInYear()Метод определяет количество недель в году.
const weeks = moment().weeksInYear();
console.log(weeks);
const weeks = moment().isoWeeksInYear();
console.log(weeks);
Некоторые годы содержат:
const year = 2026;
const week = 53;
const maxWeeks = moment().isoWeekYear(year).isoWeeksInYear();
if (week <= maxWeeks) {
console.log('Корректная неделя');
}
Moment.js изменяет исходный объект.
const original = moment();
const modified = original.week(15);
console.log(original.format());
console.log(modified.format());
Обе переменные содержат одинаковый объект.
clone()Чтобы избежать изменения исходной даты:
const original = moment();
const modified = original.clone().week(15);
console.log(original.format());
console.log(modified.format());
Moment.js поддерживает fluent-интерфейс.
const date = moment()
.year(2026)
.week(12)
.day(5)
.startOf('day');
console.log(date.format());
Установка недели может выполняться в UTC.
const date = moment.utc();
date.isoWeek(14);
console.log(date.format());
При подключении moment-timezone:
const moment = require('moment-timezone');
const date = moment.tz('2026-05-10', 'Europe/Moscow');
date.isoWeek(25);
console.log(date.format());
week() и isoWeek()moment().week(1);
moment().isoWeek(1);
Результаты могут отличаться.
moment.locale('en');
Неделя может начинаться с воскресенья.
moment('2026-01-01').isoWeek();
Дата может относиться к предыдущему ISO-году.
isoWeek()Подходит для:
week()Подходит для:
| Метод | Назначение |
|---|---|
week() |
Локальная неделя |
isoWeek() |
ISO-неделя |
weekYear() |
Локальный год недели |
isoWeekYear() |
ISO-год недели |
weeksInYear() |
Количество локальных недель |
isoWeeksInYear() |
Количество ISO-недель |
weekday() |
День недели по локали |
isoWeekday() |
ISO-день недели |
const moment = require('moment');
moment.locale('ru');
const schedule = moment()
.isoWeekYear(2026)
.isoWeek(18)
.isoWeekday(1)
.startOf('day');
console.log({
date: schedule.format('YYYY-MM-DD'),
week: schedule.isoWeek(),
year: schedule.isoWeekYear(),
weekday: schedule.isoWeekday()
});
Результат:
{
date: '2026-04-27',
week: 18,
year: 2026,
weekday: 1
}