Temporal API достиг Stage 4: конец мучениям с Date
-

После девяти лет разработки 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 означает, что через год-два браузеры и платформы полностью поддержат современное решение для работы с временем. Это не революция в смысле новых возможностей - это эволюция, долгожданное исправление фундаментальной проблемы языка, которая мешала разработчикам делать свою работу правильно. Когда нативная поддержка будет везде, от полифиллов можно будет избавиться, и код станет легче, быстрее и надёжнее.
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.