Праздничные и нерабочие дни в JavaScript не представлены как готовый
справочник в Intl, однако международный API предоставляет
набор инструментов для локализации календарного поведения,
форматирования дат и извлечения культурных правил, на основе которых
строятся системы учёта выходных и праздников.
Основой работы с датами в международном контексте выступает объект
Intl.DateTimeFormat. Он не определяет праздники, но задаёт
правила отображения дат, которые зависят от локали: порядок компонентов,
названия месяцев, дней недели и формат календаря.
const formatter = new Intl.DateTimeFormat("ru-RU", {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric"
});
formatter.format(new Date());
Разные локали не только изменяют визуальное представление даты, но и косвенно отражают культурные различия в восприятии календаря, включая рабочие циклы и недельную структуру.
Одним из ключевых элементов, связанных с нерабочими днями, является
информация о структуре недели. Она доступна через
Intl.Locale, который предоставляет данные о культурных
параметрах региона.
const locale = new Intl.Locale("ar-EG");
locale.weekInfo;
weekInfo содержит сведения о:
Пример структуры:
{
firstDay: 6,
weekend: [5, 6],
minimalDays: 1
}
Эти данные позволяют вычислять стандартные выходные дни для конкретной локали без жестко заданных правил в коде.
Выходные дни зависят от региона и религиозных традиций. Например:
Intl.Locale.weekInfo отражает именно эти различия,
предоставляя программную основу для определения нерабочих дней без
внешних таблиц.
const locale = new Intl.Locale("en-US");
console.log(locale.weekInfo.weekend); // [6, 0]
Значения дней недели кодируются от 0 (воскресенье) до 6 (суббота).
Хотя Intl не содержит информации о праздниках, он
обеспечивает корректное отображение дат, что критично для систем
календарей.
const formatter = new Intl.DateTimeFormat("ja-JP", {
year: "numeric",
month: "2-digit",
day: "2-digit"
});
Разные локали могут использовать различные календари:
Это влияет на отображение дат, включая праздничные циклы.
С помощью Intl.supportedValuesOf можно получить список
доступных календарей:
Intl.supportedValuesOf("calendar");
Календарная система определяет структуру года, месяцев и иногда способ вычисления праздничных дат. Например:
Праздники в таких системах могут быть плавающими относительно григорианских дат.
Комбинация Intl.DateTimeFormat и
Intl.Locale.weekInfo позволяет строить базовую модель
выходных дней.
const locale = new Intl.Locale("fr-FR");
const weekend = locale.weekInfo.weekend;
function isWeekend(date, locale) {
const day = date.getDay();
return locale.weekInfo.weekend.includes(day);
}
Эта модель отражает только регулярные выходные и не учитывает праздничные даты, которые требуют дополнительных источников данных.
Intl не содержит:
Его роль заключается в стандартизации отображения и предоставлении культурных параметров, а не в хранении календарных событий.
Для полноценного учёта нерабочих дней используется сочетание:
Intl.Locale для определения структуры неделиIntl.DateTimeFormat для отображения датТакая архитектура позволяет отделить:
Информация о выходных через weekInfo используется в
задачах:
function isWorkingDay(date, locale) {
return !locale.weekInfo.weekend.includes(date.getDay());
}
Такая логика универсальна и не зависит от конкретной страны, поскольку опирается на стандартизированные локали.
Каждая локаль может иметь собственные правила:
Intl предоставляет единый интерфейс для доступа к этим
различиям, обеспечивая предсказуемость поведения приложений в разных
регионах мира.