Temporal API достигает Stage 4: конец эпохи Date в JavaScript
-
Спустя годы разработки и ожидания, Temporal API наконец готов стать официальной частью стандарта ECMAScript. На март 2026 года назначена встреча TC39, где планируется выдвинуть предложение на Stage 4 - финальный уровень стандартизации. Это означает, что JavaScript получит полноценную замену для давно устаревшего объекта Date.
Долгое время разработчики мучились с Date - его мутируемостью, непредсказуемым поведением с временными зонами и странными особенностями парсинга. Temporal решает эти проблемы кардинально: новый API предлагает неизменяемые объекты, явную работу с часовыми поясами и поддержку различных календарных систем. Сейчас это уже можно использовать в Chrome и Firefox, но формальное принятие как стандарта будет означать, что все браузеры обязаны его поддерживать.
Почему Temporal так важен для современного JavaScript
Если честно, Date - это огромная боль в шее для любого разработчика. Объект накапливал ошибки и странности на протяжении десятилетий, и переписать его вот так просто было невозможно из-за обратной совместимости. Поэтому TC39 пошла другим путем: создала совершенно новый API, который работает по другим принципам.
Временные зоны в старом Date - это отдельный кошмар. Парсинг дат происходит непредсказуемо, мутируемость объектов приводит к неловким ошибкам в коде, а работа с микросекундами и наносекундами вообще забыта. Temporal меняет парадигму: вместо одного универсального объекта, у вас есть специализированные типы для разных задач.
Вот основные проблемы, которые решает новый API:
- Мутируемость Date объектов - методы вроде setMonth() меняют исходный объект, что создает неявные побочные эффекты
- Неправильное построение дат - Date(2026, 2, 15) дает март вместо февраля, потому что месяцы считаются с нуля
- Проблемы с часовыми поясами - Date хранит только локальное время и UTC, работа с конкретными часовыми поясами требует костылей
- Непредсказуемый парсинг строк - Date.parse() может интерпретировать одну и ту же строку по-разному в разных браузерах
- Отсутствие поддержки календарей - невозможно работать с негреторианскими календарями
Как Temporal уже работает в браузерах
Хорошая новость: вам не нужно ждать Stage 4, чтобы начать экспериментировать. Chrome 144, который уже поставляется, имеет полную поддержку Temporal. Firefox 139 тоже включает этот API. Safari еще в процессе разработки, но техническая версия уже содержит работающий код. Это значит, что примерно две трети основного рынка браузеров уже может использовать новый стандарт.
Чтобы понять, как работает Temporal, посмотрите на простые примеры. Создание даты теперь выглядит очевидно: нет путанницы с нулевыми месяцами, нет скрытых операций, которые меняют исходный объект. Арифметика с датами тоже стала интуитивнее - вы получаете новый объект, исходный остается неизменным.
Вот что можно делать прямо сейчас:
- Работа с простыми датами - создание и манипуляция датами без вычитания единицы из месяцев
- Применение операций - добавление дней, месяцев или часов возвращает новый объект
- Работа с временными поясами - явная и предсказуемая работа с часовыми поясами
- Форматирование - встроенное форматирование с учетом локализации
Примеры кода показывают разницу наглядно. Вместо сложного кода с несколькими getFullYear(), getMonth() и getDate(), вы пишете одну строку. Добавление дней - это просто вызов add() с параметром days. С часовыми поясами работаете через явное указание региона, что делает код понятнее.
Состояние стандартизации и поддержки браузерами
На момент, когда Chrome выпустил Temporal в стабильной версии, API находилась на Stage 3 - это значит, что она считается готовой к реализации, но еще может меняться. Stage 4 - это финальная стадия, когда спецификация полностью завершена и не будет существенных изменений. Ожидается, что TC39 предложит Temporal на Stage 4 именно в марте 2026 года на встрече в Нью-Йорке.
Поддержка браузерами развивается поэтапно. Если Chrome и Firefox уже имеют полную реализацию, то Safari еще доводит детали. Самая большая проблема сейчас - мобильные браузеры, которые часто отстают в поддержке новых стандартов на несколько месяцев или даже лет. Для production-среды разработчикам нужно учитывать эти различия.
Таблица текущей поддержки выглядит так:
Браузер Версия Статус Chrome 144+ Полная поддержка Firefox 139+ Полная поддержка Safari Technical Preview В разработке Edge На основе Chromium Полная поддержка Мобильные Разные Отставание Заинтересованная сторона - разработчики Rust. Проект temporal_rs создан как универсальная реализация на Rust, которая используется в разных JavaScript-движках. Boa, Kiesel и V8 (движок Chrome) уже используют одну и ту же реализацию. Это снижает дублирование кода и помогает обеспечить согласованное поведение во всех движках.
Реальное применение: как мигрировать на Temporal
Меньше всего разработчикам нравится вопрос “как перейти на новое”. С Temporal это не так страшно, как может показаться. API сохраняет Date в коде для обратной совместимости - никто не заставляет мигрировать весь проект в один день. Стратегия поэтапной миграции - это самый разумный подход.
В реальных проектах обычно есть несколько точек, где особенно больно работать с Date. Это может быть обработка расписаний, расчет разницы между датами с учетом летнего времени, форматирование дат для разных локалей. Именно с этих мест и имеет смысл начать переход на Temporal. Новые проекты могут использовать API полностью, старые могут внедрять постепенно.
Как именно выглядит миграция в простых случаях:
- Замена простых операций - где Date используется только для хранения дат, переход тривиален
- Рефакторинг работы с часовыми поясами - код станет понятнее и безопаснее
- Обновление форматирования - встроенные методы Temporal лучше работают с локализацией
- Переписывание расчетов - арифметика с датами станет проще и надежнее
Она сравнение того, как выглядит код раньше и теперь. С Date вы писали сложные манипуляции, отслеживали мутируемые состояния, боялись летнего времени. С Temporal код становится декларативным: вы просто описываете, что вам нужно, и API работает правильно.
Перспективы и исторический контекст
Когда-то JavaScript появился как язык для браузера, и Date был реализован в спешке. С годами язык развивался, но Date оставался как исторический багаж. Это не первый случай, когда TC39 переосмысляет фундаментальные части языка - аналогично произошло с асинхронностью (Promise, async/await) и другими областями.
Выраженный в цифрах масштаб Temporal поражает. Представители TC39 назвали его самым большим изменением в JavaScript со времен ES6. Это не просто API, это полная переосмысление работы с датами и временем. И хотя Temporal займет время на распространение, это уже необратимо меняет экосистему.
Тот факт, что все основные движки скоординировались на одной реализации (temporal_rs на Rust), показывает зрелость процесса. Раньше каждый движок писал свою реализацию новых фич, что приводило к несовместимостям. Теперь процесс более организованный и фокусируется на качестве.
Завершение стандартизации означает, что эпоха Date официально заканчивается. Хотя старый объект останется в языке из соображений совместимости, для нового кода это уже исторический артефакт. Следующее десятилетие JavaScript разработка будет использовать Temporal как стандартный способ работы с датами и временем.
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.