Библиотека Globalize предоставляет механизм локализованного парсинга
времени на основе стандарта CLDR и инфраструктуры ICU. В отличие от
ручного разбора строк через регулярные выражения или
Date.parse(), Globalize учитывает правила локали: формат
часов, разделители, порядок компонентов, сокращения AM/PM и особенности
конкретного языка.
Парсинг времени особенно важен в приложениях с международным интерфейсом, где пользователь вводит значения в привычном для своей культуры формате.
Для работы с временем требуется модуль даты:
<script src="cldr.js"></script>
<script src="cldr/event.js"></script>
<script src="cldr/supplemental.js"></script>
<script src="globalize.js"></script>
<script src="globalize/date.js"></script>
После подключения необходимо загрузить данные CLDR:
Globalize.load(
cldrDataGregorian,
cldrDataTimeData,
cldrDataWeekData,
cldrDataNumbers
);
Globalize.locale("ru");
Без загрузки соответствующих данных библиотека не сможет корректно распознавать временные форматы.
Основной инструмент для парсинга времени — метод
parseDate().
const globalize = new Globalize("ru");
const date = globalize.parseDate("15:30", {
skeleton: "Hm"
});
console.log(date);
Результатом становится объект Date.
Хотя метод называется parseDate, он используется и для
времени. Если строка содержит только часы и минуты, остальные компоненты
даты устанавливаются автоматически.
Globalize строит формат на основе CLDR-шаблонов. Вместо ручного
описания структуры применяется параметр skeleton.
const time = globalize.parseDate("21:45", {
skeleton: "Hm"
});
Обозначения:
| Символ | Значение |
|---|---|
| H | часы 0–23 |
| m | минуты |
const time = globalize.parseDate("09:15 PM", {
skeleton: "hm"
});
Здесь:
| Символ | Значение |
|---|---|
| h | часы 1–12 |
| m | минуты |
| a | AM/PM |
Для корректного разбора AM/PM обычно используется skeleton:
{
skeleton: "hma"
}
Пример:
const time = globalize.parseDate("11:20 AM", {
skeleton: "hma"
});
Globalize поддерживает секунды через символ s.
const time = globalize.parseDate("18:22:41", {
skeleton: "Hms"
});
Компоненты:
| Символ | Значение |
|---|---|
| H | часы |
| m | минуты |
| s | секунды |
Для парсинга миллисекунд используется S.
const time = globalize.parseDate("10:15:22.357", {
skeleton: "HmsSSS"
});
Globalize.locale("ru");
const time = Globalize.parseDate("23:10", {
skeleton: "Hm"
});
Globalize.locale("en");
const time = Globalize.parseDate("11:10 PM", {
skeleton: "hma"
});
Globalize.locale("de");
const time = Globalize.parseDate("23:10", {
skeleton: "Hm"
});
Разница проявляется в ожидаемых разделителях, формате часов и обозначениях периода суток.
Метод parseDate() каждый раз создает внутренний парсер.
При большом количестве операций эффективнее использовать заранее
скомпилированный обработчик.
const parser = Globalize.dateParser({
skeleton: "Hms"
});
const result = parser("12:45:11");
Такой подход уменьшает накладные расходы при массовом разборе данных.
В крупных приложениях часто применяется предварительная компиляция:
const parser = Globalize.dateParser({
datetime: "medium"
});
После этого функция может вызываться тысячи раз:
records.forEach(item => {
const value = parser(item.time);
});
Это особенно важно в:
Globalize придерживается строгого соответствия формату.
Пример корректного значения:
Globalize.parseDate("14:20", {
skeleton: "Hm"
});
Некорректный ввод:
Globalize.parseDate("14-20", {
skeleton: "Hm"
});
Результат:
null
Библиотека не пытается угадывать формат строки.
После парсинга необходимо проверять результат:
const result = Globalize.parseDate(value, {
skeleton: "Hm"
});
if (result === null) {
console.log("Ошибка формата");
}
Это основной способ обработки пользовательских ошибок.
Типичный сценарий:
function parseUserTime(input) {
return Globalize.parseDate(input, {
skeleton: "Hm"
});
}
Использование:
const result = parseUserTime("16:40");
if (result) {
console.log(result.getHours());
}
В англоязычных локалях период суток обязателен для 12-часового формата.
Корректный пример:
Globalize.parseDate("7:30 PM", {
skeleton: "hma"
});
Некорректный:
Globalize.parseDate("7:30", {
skeleton: "hma"
});
Результат:
null
При разборе только времени Globalize создает объект Date
с базовой датой.
const value = Globalize.parseDate("08:20", {
skeleton: "Hm"
});
console.log(value);
Объект будет содержать:
Для получения только времени обычно используются методы:
value.getHours()
value.getMinutes()
value.getSeconds()
const date = Globalize.parseDate("19:44:12", {
skeleton: "Hms"
});
console.log(date.getHours());
console.log(date.getMinutes());
console.log(date.getSeconds());
Вместо skeleton можно использовать явный шаблон.
const parser = Globalize.dateParser({
raw: "HH:mm:ss"
});
Пример:
const value = parser("22:10:44");
{
skeleton: "Hm"
}
Преимущества:
{
raw: "HH:mm"
}
Преимущества:
const parser = Globalize.dateParser({
raw: "hh:mm a"
});
const result = parser("09:30 PM");
| Символ | Значение |
|---|---|
| H | часы 0–23 |
| h | часы 1–12 |
| m | минуты |
| s | секунды |
| S | миллисекунды |
| a | AM/PM |
Часто время разбирается вместе с календарной датой.
const result = Globalize.parseDate(
"25.12.2025 18:30",
{
datetime: "medium"
}
);
Разные локали используют различные символы:
| Локаль | Пример |
|---|---|
| ru | 18:20 |
| en | 6:20 PM |
| fr | 18:20 |
| ja | 18:20 |
Globalize автоматически учитывает правила региона.
Globalize.parseDate("99:99", {
skeleton: "Hm"
});
Результат:
null
E_MISSING_CLDR
Причина — не загружены данные локали.
Globalize.locale("en");
Globalize.parseDate("23:10", {
skeleton: "hma"
});
Формат ожидает AM/PM, поэтому разбор завершится ошибкой.
Globalize удобно использовать как часть системы проверки форм.
function validateTime(value) {
return Globalize.parseDate(value, {
skeleton: "Hm"
}) !== null;
}
const input = document.querySelector("#time");
input.addEventListener("change", () => {
const parsed = Globalize.parseDate(input.value, {
skeleton: "Hm"
});
if (!parsed) {
input.classList.add("error");
}
});
Globalize не разбирает диапазоны автоматически.
Строку необходимо разделять вручную:
const [start, end] = "09:00 - 18:00".split(" - ");
const startTime = Globalize.parseDate(start, {
skeleton: "Hm"
});
const endTime = Globalize.parseDate(end, {
skeleton: "Hm"
});
Date.parse("10:20")
Недостатки:
Globalize.parseDate("10:20", {
skeleton: "Hm"
});
Преимущества:
const Globalize = require("globalize");
const parser = Globalize.dateParser({
skeleton: "Hms"
});
const result = parser("21:44:03");
Globalize одинаково работает как в браузере, так и в Node.js.
Повторное создание обработчиков может влиять на производительность.
Эффективный подход:
const parsers = {
shortTime: Globalize.dateParser({
skeleton: "Hm"
}),
fullTime: Globalize.dateParser({
skeleton: "Hms"
})
};
Использование:
const result = parsers.shortTime("11:20");
Globalize.locale("ru");
const parser = Globalize.dateParser({
skeleton: "Hms"
});
const input = "16:25:44";
const result = parser(input);
if (result) {
console.log("Часы:", result.getHours());
console.log("Минуты:", result.getMinutes());
console.log("Секунды:", result.getSeconds());
}
Globalize способен работать с локализованными обозначениями времени благодаря данным Unicode CLDR. Это особенно важно для:
Процесс разбора состоит из нескольких этапов:
Date.Такой подход обеспечивает единое поведение во всех средах выполнения JavaScript.