Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. Temporal API достигает Stage 4: революция в работе с датами для JavaScript в 2026

Temporal API достигает Stage 4: революция в работе с датами для JavaScript в 2026

Запланировано Прикреплена Закрыта Перенесена JavaScript
temporal apijavascript датыstage 4
1 Сообщения 1 Постеры 81 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал в отредактировано
    #1

    Temporal API наконец достиг Stage 4 в процессе TC39. Это значит, что стандарт готов к внедрению в браузеры и готов решить все проблемы с датами в JavaScript. Разработчики больше не будут мучиться с мутабельным Date объектом, который годами создавал головную боль.

    Новый API предлагает immutable объекты, поддержку часовых поясов и точность до наносекунд. Он упростит работу с датами в проектах любого масштаба. Теперь можно забыть о библиотеках вроде Moment.js и перейти на нативное решение, которое работает стабильно во всех современных средах.

    Что такое Temporal API и почему он нужен

    Temporal - это namespace с классами для работы с датами и временем. Старый Date объект мутирует при изменениях, путает часовые пояса и не поддерживает календари вроде японского. Temporal решает это: все объекты неизменяемы, есть классы для дат, времени, мгновений и интервалов.

    Представь: ты считаешь разницу между датами - с Date это лотерея из getTime и подгонок. В Temporal метод since() дает Duration объект с днями, часами и секундами. Браузеры вроде Chrome 144+ и Firefox 139+ уже поддерживают его нативно. Deno 2.7+ тоже в деле, Safari догоняет.

    Вот ключевые классы Temporal:

    • Temporal.Instant - момент во времени в UTC, идеален для серверных логов.
    • Temporal.PlainDate - дата без времени, для дней рождения или событий.
    • Temporal.ZonedDateTime - дата-время с часовым поясом, учитывает DST.
    • Temporal.Duration - интервал времени, как ‘5 месяцев и 3 дня’.
    Класс Описание Пример использования
    Instant UTC момент Temporal.Now.instant()
    PlainDate Только дата today.add({months:1})
    ZonedDateTime С поясом new Temporal.ZonedDateTime(ns, ‘Europe/Moscow’)
    Duration Интервал nextMonth.since(today)

    Как Temporal упрощает повседневные задачи

    С Temporal арифметика дат становится предсказуемой. Берешь PlainDate, добавляешь Duration - получаешь новую дату, оригинал не меняется. Это спасает от багов в многопоточных приложениях или React-компонентах. Часовые пояса? Temporal использует IANA базу, никаких сюрпризов с летним временем.

    Пример: считаем дни до дедлайна. const today = Temporal.Now.plainDateISO(); const deadline = new Temporal.PlainDate(2026, 6, 1); const daysLeft = deadline.since(today).days; Легко и точно. Форматирование через Intl.DateTimeFormat работает нативно с Temporal объектами - локализация без доп. кода.

    Преимущества над Date:

    • Неизменяемость - нет side effects.
    • Точность до наносекунд - для финансов и логов.
    • Поддержка календарей - буддистский, исламский.
    • Строки по ISO 8601, RFC9557 - надежный парсинг.
    Date Temporal
    Мутабельный Immutable
    Нет поясов Полная поддержка
    Миллисекунды Наносекунды
    Только Gregorian Множество календарей

    Примеры кода: от простого к сложному

    Начнем с базового. Получить текущее мгновение: const now = Temporal.Now.instant(); console.log(now.toString()); // 2026-03-07T09:00:00Z. Добавим дату: const today = Temporal.Now.plainDateISO(); const tomorrow = today.add({days:1}); tomorrow не трогает today.

    Сложнее: ZonedDateTime для встреч. const meeting = new Temporal.ZonedDateTime(1646697600000000000n, ‘America/New_York’); meeting.toPlainDateTime().toLocaleString(‘ru’); Получаем локализованную строку. Duration для таймеров: const dur = today.until(tomorrow); console.log(dur.toString()); // P1D.

    Практические сниппеты:

    1. Разница в месяцах: nextMonth.since(today).months.
    2. Добавление с опциями: add({years:1, months:2}, {overflow:‘constrain’}).
    3. Парсинг строки: Temporal.PlainDate.from(‘2026-03-07’).
      Overflow опции предотвращают ошибки при несуществующих датах, как 31 февраля.

    Temporal в production: полифиллы и миграция

    В 2026 Temporal production-ready в Chrome, Firefox, Deno. Для Safari - @js-temporal/polyfill, он стабилен и легкий. Не тащи date-fns или dayjs - они устаревают. Миграция простая: замени new Date() на Temporal.Now.zonedDateTimeISO(timeZone).

    Полифилл добавляется одним скриптом, тесты проходят. Для Next.js 16 или Nuxt 4 Temporal интегрируется из коробки в серверные рендеры. Тестируй на nanoseconds - старые либы сломаются.

    Шаги миграции:

    • Установи полифилл для legacy браузеров.
    • Замени Date.parse на Temporal.Instant.from.
    • Используй until/since вместо getTime разницы.
    Сценарий Date код Temporal код
    Текущая дата new Date() Temporal.Now.plainDateISO()
    +1 месяц setMonth(getMonth()+1) add({months:1})
    Разница - since().days

    Горизонт Temporal: что ждет разработчиков

    Temporal закрывает эру хаков с датами, но открывает двери для новых фич. Уже на Stage 4, он стабилен, но TC39 может доработать edge-кейсы вроде редких календарей. В 2026 подумай о типизации в TypeScript - Temporal типы отличные.

    Останутся вопросы с legacy кодом в IE, но полифиллы справятся. Следи за Safari полным релизом - тогда забудь о fallback’ах совсем. Это шаг к чистому JS без внешних deps.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы