Moment.js предоставляет мощный инструмент для работы с датами и временем в JavaScript, включая возможность конфигурирования локализации и календарных настроек. Одним из важных аспектов локализации является определение первого дня недели, который может различаться в зависимости от страны или стандарта: в большинстве стран Европы неделя начинается с понедельника, тогда как в США – с воскресенья.
Для использования Moment.js необходимо подключить библиотеку. В Node.js это делается через npm:
npm install moment
В коде:
const moment = require('moment');
Для работы с локалями потребуется также подключить локальные настройки:
require('moment/locale/ru');
Moment.js позволяет настраивать первый день недели
через локаль, используя функцию updateLocale. По умолчанию
в русской локали неделя начинается с понедельника (день 1), а в
английской – с воскресенья (день 0).
Пример настройки:
moment.updateLocale('ru', {
week: {
dow: 1, // первый день недели: 0 — воскресенье, 1 — понедельник
doy: 7 // первый день года, который определяет первую неделю
}
});
week().После настройки локали можно проверить текущий первый день недели с помощью:
const firstDay = moment.localeData().firstDayOfWeek();
console.log(firstDay); // 1 для понедельника
Первый день недели напрямую влияет на методы работы с неделями, такие как:
moment().week() – возвращает номер текущей недели в
году.moment().startOf('week') – возвращает начало
недели.moment().endOf('week') – возвращает конец недели.Пример:
moment.updateLocale('ru', { week: { dow: 1, doy: 7 } });
const startOfWeek = moment().startOf('week'); // Понедельник текущей недели
const endOfWeek = moment().endOf('week'); // Воскресенье текущей недели
Если изменить dow на 0:
moment.updateLocale('ru', { week: { dow: 0, doy: 7 } });
const startOfWeekSunday = moment().startOf('week'); // Воскресенье
const endOfWeekSaturday = moment().endOf('week'); // Суббота
Moment.js позволяет настроить индивидуальные локали:
moment.defineLocale('customLocale', {
months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
weekdays : 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
week: {
dow: 1,
doy: 7
}
});
moment.locale('customLocale');
Это позволяет использовать отдельные настройки недели без изменения глобальной локали.
updateLocale предпочтительнее, чем изменение
глобальной локали, если требуется динамическая настройка.startOf('week') и endOf('week')
должны применяться только после корректной настройки dow,
иначе расчеты могут быть некорректны.week() и isoWeek() можно
реализовать гибкие вычисления номеров недель по ISO-стандарту или
национальным стандартам.Moment.js поддерживает ISO-нумерацию недель, где:
dow: 1).doy: 4).Пример:
moment.updateLocale('ru', { week: { dow: 1, doy: 4 } });
console.log(moment().isoWeek()); // Номер недели по ISO
Использование ISO-недель особенно важно для систем учета, планирования и отчетности в международных проектах.
Настройка первого дня недели позволяет корректно:
Такая конфигурация делает Moment.js универсальным инструментом для любых проектов, где учет недельного периода критичен.