intermediate

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

Форматируйте даты, время, time zones, календари и relative time через locale-aware API вместо ручных шаблонов строк.

Локализованное форматирование даты/времени учитывает календарь, порядок, разделители, 12/24 часа и time zones. Используйте `Intl.DateTimeFormat` или проверенные библиотеки — не шаблоны `DD/MM/YYYY`, ломающиеся вне одной локали.

					const formatter = new Intl.DateTimeFormat('ru-RU', {
  dateStyle: 'medium',
  timeStyle: 'short',
  timeZone: 'Europe/Moscow',
});
formatter.format(new Date('2026-06-15T14:30:00Z'));
				

| Ловушка | Безопаснее | |---------|------------| | Хранить display strings | Хранить UTC instant; форматировать на UI | | Дрейф relative time | Обновлять «5 мин назад» по интервалу или library | | Границы DST | Всегда IANA time zone id | | Server vs user TZ | Подписывать, чью зону показываете |

Relative time («вчера», «через 2 часа») требует locale bundles и правил обновления — не склеивайте английские фрагменты.

На интервью: UTC storage vs local display; форматирование в SSR для SEO; `Temporal` vs `Date`; планировщик встреч через зоны.

Типовые ошибки: `toLocaleString` без явной locale; US-формат в EU UI; забытый time zone в письмах; парсинг locale strings через `new Date(string)`.

Компромисс — размер locale data против корректного global UX.

Чеклист:

  • Инстанты в UTC с metadata зоны при необходимости.
  • Явная locale в formatters.
  • Тест дат перехода DST.
  • Подпись time zone в UI.