В контексте библиотеки Globalize работа с временем строится вокруг разложения момента времени на отдельные компоненты и последующего их форматирования в соответствии с правилами локали. Под компонентами времени понимаются часы, минуты, секунды, а также вспомогательные элементы отображения, такие как разделители, 12/24-часовой формат и локализованные шаблоны представления.
Globalize не вводит собственную модель времени, а опирается на
стандартный объект Date в JavaScript и данные CLDR (Unicode
Common Locale Data Repository), где описаны правила отображения времени
для разных языков и регионов.
Все операции форматирования времени в Globalize опираются на CLDR:
timeFormats)Пример структуры CLDR для времени:
{
"timeFormats": {
"short": "HH:mm",
"medium": "HH:mm:ss",
"long": "HH:mm:ss z",
"full": "HH:mm:ss zzzz"
}
}
Globalize использует эти шаблоны как основу для построения форматтеров.
Основной механизм работы с компонентами времени — это форматирование
даты через dateFormatter.
const Globalize = require("globalize");
Globalize.load(
require("cldr-data/supplemental/likelySubtags"),
require("cldr-data/main/ru/timeZoneNames"),
require("cldr-data/main/ru/numbers"),
require("cldr-data/main/ru/ca-gregorian")
);
const globalize = new Globalize("ru");
const timeFormatter = globalize.dateFormatter({ time: "short" });
const date = new Date(2026, 4, 27, 14, 35);
timeFormatter(date); // "14:35"
В этом примере происходит разложение объекта Date на
компоненты времени и последующее применение локализованного шаблона.
Часы в Globalize зависят от выбранного формата:
HH — 24-часовой формат с ведущим нулёмH — 24-часовой формат без ведущего нуляhh — 12-часовой формат с ведущим нулёмh — 12-часовой формат без ведущего нуляCLDR определяет, какой формат используется по умолчанию для конкретной локали.
Минуты обозначаются символом mm или m:
mm → всегда два знака (03,
45)m → без ведущего нуля (3,
45)Globalize применяет локальные правила форматирования, но базовая логика остается одинаковой.
Секунды отображаются через:
ss — с ведущим нулёмs — без ведущего нуляСекунды чаще используются в форматах типа "medium" и
"long".
В Globalize используется концепция skeleton-форматов, где задаётся не конкретная строка, а набор требований к отображению времени.
const formatter = globalize.dateFormatter({
skeleton: "Hm"
});
Скелетон "Hm" означает:
Результат зависит от локали:
formatter(new Date(2026, 4, 27, 9, 5)); // "9:05" (или локализованный аналог)
Скелетоны позволяют абстрагироваться от конкретных шаблонов CLDR.
Одним из ключевых компонентов времени является выбор системы счисления часов.
CLDR определяет:
Пример для локали с 12-часовой системой:
const formatter = globalize.dateFormatter({ time: "short" });
formatter(new Date(2026, 4, 27, 22, 15)); // "10:15 PM"
AM/PM формируется на основе CLDR-данных:
AM → утренние часыPM → после полудняРазделитель между компонентами времени не фиксирован и определяется локалью.
Примеры:
: — большинство европейских локалей. — некоторые региональные настройкиGlobalize не хардкодит разделители, а извлекает их из CLDR.
Globalize поддерживает стандартные уровни детализации времени.
Минимальное отображение:
globalize.dateFormatter({ time: "short" });
Пример: 14:35
Добавляются секунды:
globalize.dateFormatter({ time: "medium" });
Пример: 14:35:42
Добавляется информация о временной зоне:
globalize.dateFormatter({ time: "long" });
Пример: 14:35:42 GMT+3
Максимально детализированное представление:
globalize.dateFormatter({ time: "full" });
Пример включает:
Globalize поддерживает обратную операцию — преобразование строки в
объект Date.
const parser = globalize.dateParser({ time: "short" });
parser("14:35");
Парсер сопоставляет строку с CLDR-шаблоном и извлекает:
Один и тот же ввод может быть интерпретирован по-разному:
"02:30" в 24-часовой системе → 02:30 ночи"02:30 PM" → 14:30Globalize определяет правила интерпретации на основе текущей локали:
const globalize = new Globalize("en");
const parser = globalize.dateParser({ time: "short" });
parser("02:30 PM");
Хотя время рассматривается как отдельная сущность, оно всегда связано с полной датой.
const formatter = globalize.dateFormatter({
datetime: "short"
});
formatter(new Date(2026, 4, 27, 18, 10));
Результат объединяет:
CLDR определяет порядок и разделители между компонентами даты и времени.
Скелетоны позволяют управлять детализацией:
globalize.dateFormatter({ skeleton: "Hms" });
Здесь:
Результат включает полную точность времени.
Секунды могут отображаться с различной точностью:
JavaScript Date хранит миллисекунды, но Globalize обычно
округляет их при форматировании.
Перед форматированием Globalize выполняет нормализацию:
Выход за пределы диапазонов корректируется объектом
Date, а не самой библиотекой.
Globalize отображает временную зону только при использовании соответствующих форматов CLDR.
Компоненты времени при этом:
Dateglobalize.dateFormatter({ time: "long" });
Зона берётся из системных данных окружения JavaScript.
Компоненты времени становятся базой для:
Globalize обеспечивает единообразие за счёт строгого следования CLDR, где каждый компонент времени описан как часть общей системы локализации.