Работа с датами в Globalize строится поверх данных CLDR (Unicode Common Locale Data Repository), где каждая локаль описывает правила отображения календарных элементов: порядок полей, названия месяцев, сокращения, правила форматирования времени и особенности календарных систем. Компоненты даты в Globalize представляют собой логические части даты и времени, которые используются при форматировании, разборе и структурировании временных значений.
Любая дата в контексте Globalize раскладывается на набор фундаментальных компонентов:
Год (year) Числовое значение календарного года. Может форматироваться в виде:
Год является основой большинства календарных шаблонов и участвует в построении как коротких, так и полных форматов дат.
Месяц (month) Месяц представлен как:
Globalize использует CLDR-данные для выбора корректного отображения месяца в зависимости от локали и контекста.
День (day) День месяца — числовой компонент, обычно отображается с ведущим нулём или без него. Форматирование зависит от шаблона и локали.
Помимо календарной части, дата включает временные компоненты, определяющие точное время суток.
Час (hour) Поддерживаются два формата:
Globalize автоматически выбирает формат в зависимости от локали и заданного skeleton.
Минута (minute) Минуты отображаются как числовой компонент от 00 до 59. Этот элемент всегда зависит от часа и не имеет самостоятельной локализационной сложности, кроме форматирования.
Секунда (second) Секунды варьируются от 00 до 59 и используются в более точных временных представлениях. В некоторых форматах могут включаться доли секунды.
Миллисекунды (fractional seconds) Часто применяются в технических форматах времени. Поддержка зависит от выбранного шаблона форматирования.
Некоторые элементы даты не являются строго числовыми, но критически важны для локализации.
День недели (weekday) Представляется как:
Значение определяется по дате и календарной системе, учитывая локаль.
Эра (era) Используется в календарных системах, где важна историческая привязка:
В разных локалях обозначения могут существенно отличаться.
Квартал (quarter) Используется в деловой и финансовой отчетности:
Globalize использует механизм skeleton — компактное описание требуемых компонентов даты без привязки к конкретному шаблону.
Skeleton определяет набор полей, например:
y — годM — месяцd — деньH — 24-часовой форматh — 12-часовой форматm — минутыs — секундыСкелетон yMd означает, что дата должна включать год,
месяц и день, но конкретный формат зависит от локали.
Пример использования:
Globalize.formatDate(new Date(2026, 0, 15), { skeleton: "yMd" });
Результат будет различаться в зависимости от локали:
Skeleton позволяет отделить смысл даты от её представления.
Одной из ключевых возможностей Globalize является получение структуры даты в виде набора частей. Это важно для интерфейсов, где требуется гибкое форматирование или кастомная разметка.
Метод formatDateToParts возвращает массив объектов, где
каждый элемент представляет отдельный компонент даты.
Каждый элемент имеет структуру:
type — тип компонента (year, month, day, literal и
т.д.)value — строковое значениеПример:
Globalize.formatDateToParts(new Date(2026, 0, 15), {
skeleton: "yMd"
});
Результат может выглядеть так:
[
{ type: "day", value: "15" },
{ type: "literal", value: "." },
{ type: "month", value: "01" },
{ type: "literal", value: "." },
{ type: "year", value: "2026" }
]
Разделение даты на компоненты используется для:
Каждый компонент даты в Globalize зависит от локали. Это означает, что один и тот же объект Date может быть представлен совершенно по-разному.
Особенности локализации:
CLDR предоставляет правила, определяющие эти параметры для каждой локали.
Временные компоненты часто комбинируются в различных конфигурациях:
Hms — часы, минуты, секунды (24-часовой формат)hms — часы, минуты, секунды (12-часовой формат)Hm — часы и минутыПример:
Globalize.formatDate(new Date(2026, 0, 15, 18, 45), {
skeleton: "Hm"
});
В разных локалях результат может отличаться:
Часто дата и время рассматриваются как единый набор компонентов:
Globalize позволяет гибко комбинировать эти части через skeleton:
Globalize.formatDate(new Date(), {
skeleton: "yMdHm"
});
Такой подход позволяет строить универсальные форматы, не зависящие от фиксированных шаблонов.
При обработке дат Globalize опирается на нормализацию:
Например, значение месяца всегда интерпретируется в рамках календарной системы, а не как произвольное число.
Хотя чаще всего используется григорианский календарь, Globalize поддерживает различные календарные системы через CLDR:
Каждая система изменяет смысл компонентов:
Внутри Globalize дата фактически представляется как набор взаимосвязанных элементов:
Эти компоненты не существуют изолированно — их отображение всегда определяется локалью, skeleton и правилами CLDR.
При использовании неполных skeleton:
Например, Md может дать:
Компоненты даты в Globalize не привязаны к одному формату отображения. Один и тот же набор данных может быть:
Такое разделение делает систему независимой от конкретных форматов и упрощает поддержку мультиязычных интерфейсов.