Короткие, средние и длинные форматы

Библиотека Globalize поддерживает несколько уровней представления даты и времени. Основной механизм построен вокруг стандарта CLDR (Common Locale Data Repository), благодаря которому форматирование автоматически учитывает региональные правила: порядок компонентов даты, сокращения месяцев, особенности записи времени, использование 12- или 24-часового формата.

Наиболее востребованные варианты форматирования:

  • короткий формат (short);
  • средний формат (medium);
  • длинный формат (long);
  • полный формат (full).

Каждый из них определяет степень детализации отображаемых данных.


Подключение модулей форматирования

Для работы с датами необходимы модули CLDR и соответствующий функционал библиотеки.

const Globalize = require("globalize");

Globalize.load(
  require("cldr-data/main/en/ca-gregorian.json"),
  require("cldr-data/main/en/timeZoneNames.json"),
  require("cldr-data/supplemental/likelySubtags.json")
);

Globalize.locale("en");

После инициализации становятся доступны методы форматирования даты и времени.


Короткие форматы

Короткий формат предназначен для компактного отображения даты или времени. Обычно используется:

  • в таблицах;
  • в формах;
  • в списках;
  • в административных интерфейсах;
  • в мобильных приложениях.

Короткий формат даты

const formatter = Globalize.dateFormatter({
  date: "short"
});

console.log(formatter(new Date()));

Пример результата для локали en:

5/27/26

Для русской локали:

Globalize.locale("ru");

const formatter = Globalize.dateFormatter({
  date: "short"
});

console.log(formatter(new Date()));

Результат:

27.05.2026

Особенности короткого формата

Короткий формат:

  • использует минимальное количество символов;
  • почти всегда содержит только цифры;
  • не включает названия месяцев;
  • не показывает день недели;
  • редко содержит сведения о часовом поясе.

Короткий формат времени

const formatter = Globalize.dateFormatter({
  time: "short"
});

console.log(formatter(new Date()));

Пример:

14:25

Для англоязычных локалей возможен формат:

2:25 PM

Поведение зависит от региональных настроек CLDR.


Комбинированный короткий формат

const formatter = Globalize.dateFormatter({
  datetime: "short"
});

console.log(formatter(new Date()));

Результат:

5/27/26, 2:25 PM

или:

27.05.2026, 14:25

Средние форматы

Средний формат считается наиболее универсальным. Он обеспечивает баланс между компактностью и читаемостью.

Средний формат даты

const formatter = Globalize.dateFormatter({
  date: "medium"
});

console.log(formatter(new Date()));

Пример:

May 27, 2026

Для русской локали:

27 мая 2026 г.

Характеристики среднего формата

Средний формат обычно:

  • использует сокращённые названия месяцев;
  • содержит полный год;
  • остаётся достаточно компактным;
  • хорошо подходит для пользовательских интерфейсов.

Средний формат времени

const formatter = Globalize.dateFormatter({
  time: "medium"
});

console.log(formatter(new Date()));

Результат:

14:25:48

или:

2:25:48 PM

Средний формат времени часто включает секунды.


Средний формат даты и времени

const formatter = Globalize.dateFormatter({
  datetime: "medium"
});

console.log(formatter(new Date()));

Пример:

May 27, 2026, 2:25:48 PM

Длинные форматы

Длинный формат применяется там, где требуется более официальное или детализированное представление даты.

Типичные сценарии:

  • документы;
  • отчёты;
  • уведомления;
  • аналитические панели;
  • экспортируемые данные.

Длинный формат даты

const formatter = Globalize.dateFormatter({
  date: "long"
});

console.log(formatter(new Date()));

Пример:

May 27, 2026

Для некоторых локалей длинный формат отличается расширенным названием месяца или дополнительными элементами.

Русская локаль:

27 мая 2026 г.

Длинный формат времени

const formatter = Globalize.dateFormatter({
  time: "long"
});

console.log(formatter(new Date()));

Возможный результат:

2:25:48 PM GMT+3

Особенности:

  • отображение часового пояса;
  • более подробная информация о времени;
  • пригодность для логирования и системных уведомлений.

Длинный формат даты и времени

const formatter = Globalize.dateFormatter({
  datetime: "long"
});

console.log(formatter(new Date()));

Пример:

May 27, 2026 at 2:25:48 PM GMT+3

Полные форматы

Полный формат (full) содержит максимально подробную информацию.

Используется:

  • в международных системах;
  • в календарях;
  • в корпоративной отчётности;
  • в приложениях для бронирования;
  • в системах событий.

Полный формат даты

const formatter = Globalize.dateFormatter({
  date: "full"
});

console.log(formatter(new Date()));

Пример:

Wednesday, May 27, 2026

Русская локаль:

среда, 27 мая 2026 г.

Полный формат времени

const formatter = Globalize.dateFormatter({
  time: "full"
});

console.log(formatter(new Date()));

Результат:

2:25:48 PM GMT+03:00

Полный формат времени:

  • почти всегда содержит информацию о часовом поясе;
  • может включать региональное название зоны;
  • ориентирован на максимальную точность.

Полный формат даты и времени

const formatter = Globalize.dateFormatter({
  datetime: "full"
});

console.log(formatter(new Date()));

Пример:

Wednesday, May 27, 2026 at 2:25:48 PM GMT+03:00

Различия между форматами

Формат Пример Особенности
short 5/27/26 Максимальная компактность
medium May 27, 2026 Хорошая читаемость
long May 27, 2026 at 2:25 PM GMT+3 Дополнительные детали
full Wednesday, May 27, 2026 at 2:25 PM GMT+03:00 Полная информация

Автоматическая локализация

Одно из ключевых преимуществ Globalize — автоматическая адаптация форматов под регион.

Например:

Globalize.locale("en");
5/27/26
Globalize.locale("de");
27.05.26
Globalize.locale("ja");
2026/05/27

Порядок компонентов даты меняется автоматически без дополнительной логики.


Работа с несколькими локалями

Часто требуется динамически переключать язык интерфейса.

function formatDate(locale, date) {
  Globalize.locale(locale);

  const formatter = Globalize.dateFormatter({
    datetime: "medium"
  });

  return formatter(date);
}

console.log(formatDate("en", new Date()));
console.log(formatDate("fr", new Date()));
console.log(formatDate("ru", new Date()));

Использование кэширования форматтеров

Создание форматтера — относительно дорогая операция. В крупных приложениях рекомендуется переиспользование объектов форматирования.

Нежелательный вариант:

function renderDate(date) {
  return Globalize.dateFormatter({
    datetime: "medium"
  })(date);
}

Оптимизированный вариант:

const formatter = Globalize.dateFormatter({
  datetime: "medium"
});

function renderDate(date) {
  return formatter(date);
}

Форматирование только времени

Во многих интерфейсах требуется отображать исключительно время.

const shortTime = Globalize.dateFormatter({
  time: "short"
});

const mediumTime = Globalize.dateFormatter({
  time: "medium"
});

const longTime = Globalize.dateFormatter({
  time: "long"
});

Различия:

14:25
14:25:48
14:25:48 GMT+3

Форматирование только даты

const shortDate = Globalize.dateFormatter({
  date: "short"
});

const mediumDate = Globalize.dateFormatter({
  date: "medium"
});

const fullDate = Globalize.dateFormatter({
  date: "full"
});

Пример вывода:

27.05.26
27 мая 2026 г.
среда, 27 мая 2026 г.

Использование в React

import Globalize from "globalize";

const dateFormatter = Globalize.dateFormatter({
  datetime: "medium"
});

function DateView({ value }) {
  return (
    <span>{dateFormatter(value)}</span>
  );
}

Использование в Node.js

const http = require("http");

const formatter = Globalize.dateFormatter({
  datetime: "long"
});

http.createServer((req, res) => {
  res.end(formatter(new Date()));
});

Влияние CLDR на форматирование

Библиотека Globalize не хранит правила локализации внутри себя. Все шаблоны берутся из CLDR.

Это означает:

  • поддерживаются сотни локалей;
  • обновления региональных стандартов приходят через CLDR;
  • форматирование соответствует международным требованиям;
  • не требуется вручную поддерживать шаблоны дат.

Выбор подходящего формата

Когда использовать short

Подходит для:

  • таблиц;
  • списков;
  • мобильных интерфейсов;
  • ограниченного пространства.

Когда использовать medium

Подходит для:

  • большинства пользовательских интерфейсов;
  • карточек;
  • панелей управления;
  • стандартных приложений.

Когда использовать long

Подходит для:

  • деловых интерфейсов;
  • журналов событий;
  • отчётности;
  • административных систем.

Когда использовать full

Подходит для:

  • международных систем;
  • календарей;
  • расписаний;
  • юридических документов;
  • систем бронирования.

Ошибки при использовании форматов

Отсутствие CLDR-данных

Если не загрузить необходимые JSON-файлы, форматирование завершится ошибкой.

Неправильно:

const formatter = Globalize.dateFormatter({
  date: "short"
});

Правильно:

Globalize.load(
  require("cldr-data/main/en/ca-gregorian.json")
);

Частое создание форматтеров

Ошибка производительности:

for (const item of items) {
  const formatter = Globalize.dateFormatter({
    date: "medium"
  });

  console.log(formatter(item.date));
}

Оптимизированный вариант:

const formatter = Globalize.dateFormatter({
  date: "medium"
});

for (const item of items) {
  console.log(formatter(item.date));
}

Неправильный выбор уровня детализации

Слишком длинные форматы ухудшают читаемость интерфейса.

Плохо для таблицы:

Wednesday, May 27, 2026 at 2:25:48 PM GMT+03:00

Лучше:

5/27/26

или:

May 27, 2026

Комбинирование форматов

Форматы даты и времени могут использоваться отдельно в разных частях интерфейса.

Пример:

const dateFormatter = Globalize.dateFormatter({
  date: "medium"
});

const timeFormatter = Globalize.dateFormatter({
  time: "short"
});

console.log(dateFormatter(new Date()));
console.log(timeFormatter(new Date()));

Результат:

May 27, 2026
2:25 PM

Форматирование временных меток

const logFormatter = Globalize.dateFormatter({
  datetime: "long"
});

console.log(
  `[${logFormatter(new Date())}] Server started`
);

Пример:

[May 27, 2026 at 2:25:48 PM GMT+3] Server started

Поддержка часовых поясов

Длинные и полные форматы автоматически используют данные о временных зонах из CLDR.

Для этого необходим модуль:

require("cldr-data/main/en/timeZoneNames.json")

Без него информация о часовых поясах может отображаться некорректно или отсутствовать полностью.


Сравнение с Intl.DateTimeFormat

Globalize во многом повторяет концепции встроенного API Intl.DateTimeFormat, но предоставляет:

  • более тесную интеграцию с CLDR;
  • единый механизм локализации;
  • поддержку дополнительных возможностей интернационализации;
  • предсказуемую структуру работы с локалями.

Пример аналогичного поведения:

new Intl.DateTimeFormat("en", {
  dateStyle: "short"
});

В Globalize:

Globalize.dateFormatter({
  date: "short"
});