
После девяти лет разработки Temporal API официально достиг Stage 4 в процессе TC39, что означает его включение в стандарт ECMAScript 2026. Это исторический момент для JavaScript - впервые у разработчиков появится современное и удобное решение для работы с датами и временем вместо криво работающего объекта Date, который мучил программистов с 1995 года.
Теперь не нужно будет вытаскивать внешние библиотеки вроде Moment.js и других костылей, которые скачивали 84 миллиона раз в неделю только потому, что встроенный инструмент оказался совершенно непригодным. Temporal решает множество реальных проблем, с которыми сталкиваются разработчики при работе с временными данными в масштабных приложениях.
Почему Date нужно было менять
Объект Date в JavaScript никогда не был удобным инструментом для работы с датами и временем. Он не поддерживает работу с временными зонами по-человечески, не может хранить время с наносекундной точностью, и вообще построен так, словно его создавали люди, которые никогда не работали с финансовыми системами или глобальными приложениями.
Блумберг столкнулся с этой проблемой лицом к лицу: их терминал работает на JavaScript и должен функционировать по всему миру во всех часовых поясах одновременно. Финансовые операции требуют наносекундной точности для временных меток сделок, а историческая информация о сдвигах часовых поясов должна работать корректно. Встроенный Date просто не мог это обеспечить, поэтому компания решила спонсировать разработку полноценной замены.
Вот основные проблемы, которые Temporal решает:
- Часовые пояса без головной боли - явная поддержка любых часовых поясов из базы IANA
- Наносекундная точность - для финансовых и временных критичных операций
- Неизменяемость - новые типы данных не могут быть случайно изменены
- Множество календарных систем - не только григорианский календарь, но и еврейский, исламский и другие
- Стандартизация - соответствие RFC 9557, RFC 3339 и ISO 8601
Что конкретно получит разработчик
Temporal добавляет в JavaScript целую экосистему новых типов для работы с временем, каждый из которых решает конкретную задачу. Вместо попыток «выжать» нужную функциональность из Date, теперь можно использовать правильный инструмент для каждого сценария.
Новый API обеспечивает явную работу с часовыми поясами вместо скрытых преобразований, которые часто приводят к ошибкам. Разработчики могут легко манипулировать датами без странных побочных эффектов, которые были в Date. Временные метки округляются правильно, часовые пояса применяются корректно, и исторические данные обрабатываются без головной боли.
Основные типы Temporal:
Temporal.PlainDate- просто дата без времениTemporal.PlainTime- просто время без датыTemporal.PlainDateTime- дата и время, но без часового поясаTemporal.ZonedDateTime- дата, время и часовой пояс вместеTemporal.YearMonth- месяц и год без дня (например, для счётов)Temporal.MonthDay- день и месяц без года (для дней рождения)Temporal.Duration- промежуток времени между событиями
Каждый тип спроектирован с учётом реальных потребностей разработчиков, а не случайно сложенной логики, как в Date.
Где уже работает и как скоро использовать
Temporal уже поддерживается в основных браузерах и вполне готов к использованию в продакшене прямо сейчас, без ожидания полной стандартизации. Firefox версии 139 получил поддержку в май 2025 года, Chrome и Edge версии 144 - в январе 2026. Safari имеет частичную поддержку в Technology Preview с полной поддержкой, ожидаемой к концу 2026 года.
Для разработчиков, которые хотят использовать Temporal уже сейчас, существует полифилл размером около 100 килобайт в сжатом виде. Когда Temporal станет частью стандарта и будет поддерживаться везде, от полифилла можно избавиться и сэкономить место в бандле. TypeScript 6.0 Beta уже включил типы для Temporal, что означает полную поддержку при разработке.
Текущая поддержка браузерами выглядит так:
| Браузер | Версия | Когда |
|---|---|---|
| Firefox | 139+ | Май 2025 |
| Chrome | 144+ | Январь 2026 |
| Edge | 144+ | Январь 2026 |
| Safari | Tech Preview | Конец 2026 |
| Node.js | 26 | Скоро |
| TypeScript | 6.0 Beta | Февраль 2026 |
Для legacy проектов есть полифилл, который обеспечивает полную функциональность, но весит прилично. Это стоит учитывать при выборе между нативной поддержкой и полифиллом.
Сколько работы пришлось вложить
Dev часто не понимают, сколько именно усилий требуется чтобы добавить что-то в JavaScript стандарт. Temporal стал, вероятно, самым крупным предложением в истории TC39, и это не преувеличение. Предложение увеличило размер спецификации JavaScript примерно на 40 процентов - это огромное количество текста, логики и деталей, которые пришлось проработать.
Блумберг не просто пожаловался на проблему - компания вложила серьёзные ресурсы в её решение. Она спонсировала трёх полнотайм инженеров (Филиппа Дункеля, Филипа Чименто и Уджвала Шарму) и поддерживала их работу в течение девяти лет. Igalia также была ключевым партнёром в разработке, внося значительный вклад в стандартизацию.
Процесс TC39 требует согласия всех сторон на каждом шаге, что означает бесчисленные обсуждения, переработку деталей и тестирование. Для браузеров реализация Temporal стала большой задачей - нужно было добавить поддержку огромного количества функциональности в движки JavaScript. Все эти детали приводили к сложностям, которые требовали постоянного обсуждения и согласования.
Что ещё нужно знать перед внедрением
Хотя Temporal уже готов к использованию, есть несколько практических соображений перед внедрением. Во-первых, это большой API с множеством методов и опций - придётся потратить время на обучение и адаптацию кода. Во-вторых, миграция существующего кода с Date на Temporal будет требовать систематического подхода, особенно в больших проектах.
Тестирование для Temporal включает около 4500 тестов из набора test262 - это намного больше, чем 594 теста для Date. Такое внимание к качеству означает, что API хорошо протестирован, но также говорит о его сложности и обширности. Разработчикам стоит изучить документацию и примеры, прежде чем переводить всё на Temporal.
Практические рекомендации при внедрении:
- Начните с новых проектов - не торопитесь с переносом существующего кода
- Изучите разные типы Temporal для своих сценариев - выбор правильного типа критичен
- Используйте TypeScript для полной типизации - это сильно снижает ошибки
- Тестируйте работу с часовыми поясами и граничными случаями
- Сначала используйте нативную поддержку, а не полифилл, если это возможно
- Документируйте, как в вашем коде работают даты и времена
Конец эпохи костылей
Теперь, когда Temporal официально стал частью стандарта, можно закрывать целую эпоху JavaScript разработки, когда работа с датами была источником бесконечной боли и багов. 84 миллиона еженедельных скачиваний библиотек вроде Moment.js были не просто цифрами - это был крик всех разработчиков в пустоту, требующий решения проблемы, которая была в стандарте с 1995 года.
Включение Temporal в ECMAScript 2026 означает, что через год-два браузеры и платформы полностью поддержат современное решение для работы с временем. Это не революция в смысле новых возможностей - это эволюция, долгожданное исправление фундаментальной проблемы языка, которая мешала разработчикам делать свою работу правильно. Когда нативная поддержка будет везде, от полифиллов можно будет избавиться, и код станет легче, быстрее и надёжнее.


















