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

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

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

    Temporal API официально вышел на Stage 4 в TC39. Это значит, что браузеры скоро получат встроенную замену старому Date.

    Работа с датами в JavaScript всегда была головной болью. Неправильный парсинг, отсутствие нормальной поддержки часовых поясов и мутабельность объектов приводили к багам. Temporal решает эти проблемы раз и навсегда, предлагая надежные инструменты для приложений с расписаниями, календарями и временем.

    Теперь разработчики смогут писать код без polyfill’ов и с предсказуемым поведением везде.

    Что такое Temporal и почему он меняет правила игры

    Temporal - это новый глобальный объект в JavaScript, который заменяет Date. Он вводит immutable объекты, полную поддержку часовых поясов и календарей. Вместо путаницы с месяцами с 0-индексацией и ненадежным парсингом здесь все предсказуемо.

    Представьте задачу: посчитать разницу во времени между встречей в Нью-Йорке и Париже. С Date это фестиваль ошибок из-за переходов на летнее время. Temporal использует ZonedDateTime для точных вычислений, учитывая offset и локальные правила. Уже есть примеры в Firefox Nightly и polyfill’ах, показывающие стабильность.

    Экспериментальные реализации в браузерах подтверждают: API готов к продакшену. Это упростит код в веб-приложениях, где время критично, от дашбордов до мобильных напоминаний.

    • Instant: точка во времени, независимая от зон (например, epoch timestamp).
    • ZonedDateTime: дата-время с зоной, автоматически корректирует DST.
    • Duration: неизменяемая длительность, сравнивается лексикографически.
    Концепция Описание Пример
    Instant Универсальная точка Temporal.Instant.fromEpochMilliseconds(1851222399924)
    Duration Интервал Temporal.Duration.from({hours:1, minutes:30})
    ZonedDateTime С зоной Temporal.ZonedDateTime.from('2021-08-01T12:00[America/New_York]')

    Основные проблемы Date и как Temporal их фиксит

    Старый Date поддерживает только локальное время и UTC, без нормальных зон. Парсинг строк - лотерея: ‘2024-03-09’ может интерпретироваться по-разному. Объекты мутабельны, что ломает чистый код и тесты.

    Temporal делает все immutable: вызовы вроде add() возвращают новый объект. Поддержка IANA зон (Europe/Paris, US/Eastern) встроена. Сравнение Duration работает как ожидается - PT1H30M раньше PT2H.

    В реальных проектах это спасает от багов в scheduling. Например, добавление 24 часов к дате в DST-зоне не сдвинет время, как в Date.

    const zdt = Temporal.ZonedDateTime.from('2024-03-09T17:00-05[-05]');
    const nextDay = zdt.add('P1d');
    console.log(nextDay.toString()); // 2024-03-10T17:00:00-05:00[-05:00]
    
    • Парсинг с offset: Temporal.ZonedDateTime.from('2025-06-20T17:00+08[US/Eastern]') игнорирует неверный offset.
    • Локализация: duration.toLocaleString('en-US') дает читаемый формат.
    • Сортировка: Temporal.Duration.compare упорядочивает интервалы правильно.
    Проблема Date Решение Temporal Выгода
    Нет зон ZonedDateTime Точные переходы DST
    Мутабельность Immutable Без побочек
    Плохой парсинг Структурированный Предсказуемость
    Нет Duration Отдельный тип Легкие расчеты

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

    Начнем с базового: создание Instant и Duration. Temporal.Now.instant() дает текущий момент, а until() вычисляет разницу.

    const launch = Temporal.Instant.fromEpochMilliseconds(1851222399924);
    const now = Temporal.Now.instant();
    const duration = now.until(launch, {smallestUnit: 'hour'});
    console.log(`Осталось ${duration.toLocaleString('ru-RU')} до запуска`);
    

    Для зон: конвертируем встречу из Нью-Йорка в Париж. withTimeZone() сохраняет момент, меняя представление.

    const meeting = Temporal.ZonedDateTime.from('2021-08-01T12:00[America/New_York]');
    const parisTime = meeting.withTimeZone('Europe/Paris');
    console.log(parisTime.toString()); // 2021-08-01T18:00:00+02:00[Europe/Paris]
    

    Это работает в polyfill’ах вроде @js-temporal/polyfill, готовясь к нативной поддержке.

    • Добавление интервала: zoned.add(duration) - новый объект без мутаций.
    • Нюанс: Leap seconds игнорируются для простоты.
    • Сравнение зон: zdt.withTimeZone('UTC') для унификации.

    Готовность к продакшену и миграция

    На Stage 4 спецификация завершена, изменения минимальны. Браузеры вроде Firefox уже тестируют, Chrome и Safari последуют. Polyfill позволяет использовать сейчас.

    Миграция простая: замените new Date() на Temporal.PlainDate или ZonedDateTime. Тесты покажут разницу в точности. Для старых проектов -енная замена в модулях с временем.

    const durations = [
      Temporal.Duration.from({hours:1}),
      Temporal.Duration.from({hours:1, minutes:30})
    ];
    durations.sort(Temporal.Duration.compare);
    
    • Polyfill: npm i @js-temporal/polyfill - 100% покрытие.
    • Браузерная поддержка: экспериментально в Nightly.
    • Важно: Используйте {offset: ‘ignore’} для lenient парсинга.
    Статус Поддержка Рекомендация
    Polyfill Полная Для продакшена сейчас
    Firefox Эксперимент Тестировать
    Chrome/Safari Скоро Ждать 2026

    Temporal открывает новые горизонты

    Stage 4 - это зеленый свет для экосистемы. Останутся нюансы вроде кастомных календарей или интеграции с Intl API.

    Дальше - оптимизации под WebAssembly и мобильные устройства. Стоит поэкспериментировать с polyfill’ом, чтобы код стал чище и надежнее уже сегодня.

    Temporal меняет не только JS, но и подход к времени в веб-разработке в целом.

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

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

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

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

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

    Категории

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

    Контакты

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

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

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

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

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