Temporal - Замена Date в JavaScript

Спустя почти 30 лет у JavaScript появляется новый API для работы с датами -Temporal.

И, по моему мнению - это очень большая новость для всего Frontend сообщества, так как Date в JS может доставлять не мало проблем при разработке.

Я сам не раз сталкивался с проблемой, когда на фронте один формат, на бэке другой, неочевидное поведение Date под капотом и по итогу боль, страдание, баги и поиск библиотек которые решают существующие проблемы.

Например: new Date(2025, 0, 1)

Почему январь — это 0? Почему вообще API дат выглядит так, будто его проектировали в 3 часа ночи?

Ещё веселее, в зависимости от timezone можно неожиданно получить: - другой день - другое время - странные баги

А работа с timezone, DST, вычислением дат и форматированием почти всегда превращается в квест.

Поэтому годами разработчики жили на таких библиотеках как moment.js, date-fns, dayjs, luxon и тд.

Temporal пытается решить эти проблемы.

Главные изменения: - immutable API - нормальная работа с timezone - отдельные типы для: - даты - времени - datetime - timestamp - предсказуемый parsing - удобная арифметика дат

Например: const date = Temporal.PlainDate.from('2025-05-20'); const nextWeek = date.add({ days: 7 });

Выглядит и читается намного понятнее, чем большинство операций через Date.

В итоге, Temporal делает API дат более явным.

Согласно caniuse, до полной поддержки во всех браузерах еще далеко, сегодня процент поддержки всего 67% и лишь в двух крупных браузерах - Chrome и Firefox, но похоже, что конец эпохи бесконечной боли с Date уже не за горами. Или нет?