Форматирование дат и чисел

Библиотека FAST Element предоставляет удобные механизмы для локализованного форматирования данных в пользовательском интерфейсе. Особое внимание уделяется числам и датам, поскольку они имеют множество вариантов представления и зависят от выбранного языка и региона.

Роль Intl в экосистеме FAST

FAST Element опирается на встроенные возможности веб-платформы, главным образом на API Intl. Форматирование чисел, валют, процентов и дат выполняется через объекты Intl.NumberFormat и Intl.DateTimeFormat. Такое решение исключает необходимость в сторонних зависимостях и обеспечивает корректную работу как в браузере, так и в среде веб-компонентов.

Использование Intl позволяет конфигурировать форматирование по локали и набору опций. Например, валюта, единицы измерения, разрядность дробной части и схема отображения времени могут быть заданы при инициализации форматтера и переиспользованы в компонентах FAST.

Форматирование числовых данных

Основные опции

Ключевые параметры цифрового форматирования включают:

  • style: numeric, currency, percent, unit
  • currency: код валюты согласно ISO 4217
  • unit: метрические или иные единицы
  • minimumFractionDigits и maximumFractionDigits: количество знаков после запятой
  • useGrouping: разделение тысячных групп

Использование этих опций позволяет отображать одно и то же число в разных контекстах, сохраняя единый источник данных внутри компонента.

Интеграция с компонентами FAST

Компоненты FAST Element поддерживают привязку значений через директивы. Форматирование может быть выполнено в вычисляемых свойствах либо через пользовательские конвертеры. Конвертеры выступают прослойкой между данными и шаблоном, позволяя разделять ответственность: бизнес-логика генерирует значения, а конвертер определяет способ их отображения.

Для валютных значений характерно использование style: "currency" с явным указанием кода валюты. Проценты же обычно выводятся через style: "percent" с динамической точностью.

Обработка больших чисел

Финансовые и статистические компоненты требуют корректного отображения больших значений. FAST Element не накладывает ограничений на диапазон, используя возможности Intl.NumberFormat. При необходимости сокращения (1K, 10M) применяется опция notation: "compact", обеспечивающая лаконичное представление без потери смысла.

Форматирование дат и времени

Выбор локали и стиля

Форматирование дат опирается на Intl.DateTimeFormat. Параметры dateStyle и timeStyle задают степень детализации: от краткого (short) до расширенного (full). Благодаря этому дата может быть выведена как в компактном виде для таблиц, так и в развернутом варианте для карточных компонентов.

Локаль влияет на порядок элементов (день-месяц-год или месяц-день-год), разделители и наименования месяцев. FAST Element не вмешивается в выбор локали, передавая её напрямую в конструктор форматтера.

Временные зоны и точность

Опция timeZone позволяет привязать дату к конкретной временной зоне. Для событийных компонентов это критично, поскольку одна и та же временная метка может иметь разный смысл в зависимости от локации пользователя. Параметры hourCycle, hour, minute, second и fractionalSecondDigits контролируют детализацию времени, включая поддержку субсекундной точности.

Конвертеры времени в FAST

Конвертеры часто применяются для отображения дат в относительной форме (например: “2 часа назад”). FAST Element допускает использование сторонних библиотек для вычисления относительных дат, однако вывод может быть выполнен через Intl.RelativeTimeFormat, что снижает зависимость от внешнего кода и упрощает интернационализацию.

Привязка и реактивность

Механизм реактивных свойств FAST гарантирует корректный пересчет форматированных значений при изменении исходных данных. Форматтеры могут храниться в свойствах компонента и кэшироваться для повышения производительности, особенно если форматирование выполняется часто.

Привязка в шаблоне FAST использует выражения, позволяя комбинировать данные и конвертеры. Например, одно и то же значение даты может быть отформатировано по-разному в разных частях компонента, без дублирования бизнес-логики.

Особенности интернационализации

Локаль обычно передается извне и не жестко зашивается в компонент. Это повышает переносимость и позволяет использовать компоненты в разных контекстах. FAST Element не навязывает единый подход к хранению и управлению локалью; она может поступать через контекст, параметры конструктора, глобальные настройки приложения или системные предпочтения браузера.

Поддержка дополнительных языков и региональных форматов сводится к правильному выбору параметров Intl и созданию унифицированных конвертеров. Такой подход упрощает тестирование и снижает вероятность ошибок, связанных с неверным порядком элементов даты или форматированием валют.

Производительность и кэширование

Инициализация Intl.NumberFormat и Intl.DateTimeFormat относительно затратна. В компонентах FAST принято кэшировать экземпляры форматтеров на уровне класса или инстанса. При смене локали кэш инвалидации обязателен, иначе форматирование останется прежним.

Кэширование также важно для списочных компонентов, например таблиц с финансовыми данными или расписаниями, где пересчет значений происходит многократно при рендере.

Тестирование форматирования

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

Тесты не требуют сложной инфраструктуры: Intl детерминирован при фиксированной локали, что делает проверку предсказуемой и надежной.