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

Temporal API в ECMAScript 2026: конец проблем Date

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

    Temporal API наконец-то меняет подход к датам в JavaScript. Этот новый стандарт из ECMAScript 2026 решает старые боли объекта Date: мутации, неясный парсинг и проблемы с часовыми поясами. Теперь разработчики получат надежные инструменты для работы с временем без библиотек вроде date-fns.

    С Temporal код становится предсказуемым и безопасным. Представьте: даты без случайных таймзон, неизменяемые значения и простая арифметика. Это спасет часы отладки в проектах с международными пользователями. Давайте разберем, как это работает на практике.

    Почему Date устарел и как Temporal его заменяет

    Объект Date в JavaScript мучил разработчиков десятилетиями. Парсинг строк вроде ‘2026-03-01’ зависит от локали браузера, что приводит к ошибкам. Арифметика мутирует объект, а таймзоны обрабатываются хаотично - иногда с UTC, иногда локально. Temporal вводит отдельные типы для разных задач: PlainDate для дат без времени, ZonedDateTime для дат с поясом.

    Все типы неизменяемы - методы возвращают новые объекты, а не меняют старые. Это предотвращает баги от неожиданных мутаций. Парсинг стал строгим: Temporal.PlainDate.from(‘2026-02-13’) всегда создаст дату без времени и зоны. В Chrome 144 это уже стабильно работает, хотя Safari отстает.

    Вот ключевые типы Temporal и их применение:

    • PlainDate: дата без времени. Идеально для дней рождения или сроков. Пример: Temporal.PlainDate.from('2026-02-13').add({ days: 7 }) вернет 2026-02-20.
    • PlainTime: только время. Полезно для расписаний: Temporal.PlainTime.from('14:30:00').
    • ZonedDateTime: дата, время и пояс. Temporal.Now.zonedDateTimeISO('Europe/Moscow') даст точное время в Москве.
    • Instant: абсолютный момент в UTC. Для логов и серверных меток.
    • Duration: интервалы. Temporal.Duration.from({ days: 5, hours: 3 }) для вычислений.
    Свойство Date Temporal
    Неизменяемость Мутации Новые объекты
    Парсинг Локаль-зависимый Строгий ISO
    Таймзоны Смешанные Явные типы
    Календари Только григорианский Множество

    Основные типы Temporal на примерах

    Temporal предлагает namespace с классами вроде PlainDateTime, PlainYearMonth и PlainMonthDay. Каждый тип решает конкретную задачу: PlainYearMonth для подписок (‘2026-03’), PlainMonthDay для праздников (14 февраля). Арифметика простая и безопасная - add, subtract возвращают новые экземпляры.

    Рассмотрим реальный сценарий: планировщик задач. С Date пришлось бы вручную корректировать зоны и парсить ISO. Temporal.Now.plainDateISO() даст сегодняшнюю дату, а .add({ weeks: 1 }) - будущую без сюрпризов. Форматирование через toLocaleString() использует ECMA-402 для локализации.

    Практические примеры кода:

    1. Добавление дней: const date = Temporal.PlainDate.from({ year: 2026, month: 3, day: 1 }); const next = date.add({ days: 30 }); console.log(next.toString()); // 2026-03-31
    2. Разница дат: const diff = date.until(next); console.log(diff.days); // 30
    3. Зона: const zoned = Temporal.ZonedDateTime.from('2026-03-01T10:00:00[Europe/Moscow]');

    Важно: Temporal поддерживает не только ISO, но и другие календари - японский, буддистский. Это упрощает apps для Азии.

    Арифметика и работа с Duration

    Duration - сердце арифметики в Temporal. Этот класс представляет интервалы: дни, часы, минуты. Методы like({ hours: 2 }) нормализуют значения, учитывая високосные годы. Сравните с Date: new Date(date.getTime() + 86400000) может сдвинуть время из-за DST.

    Temporal.Now.instant() дает точный момент для сервер-клиент синхронизации. Метод until() между датами возвращает Duration. Это идеально для дашбордов: вычисление overtime или сроков поставок без ошибок.

    Преимущества Duration:

    • Нормализация: 25 часов станет 1 день + 1 час.
    • Арифметика: duration.add(otherDuration) без мутаций.
    • Поддержка отрицательных значений для разниц в прошлом.

    Таблица сравнения операций:

    Операция Date пример Temporal пример
    +1 день date.setDate(date.getDate() + 1) date.add({ days: 1 })
    Разница date2 - date1 date2.until(date1)
    Формат toISOString() toString() с опциями

    Temporal в production: что учесть

    Несмотря на Stage 3, Chrome 144 уже использует Temporal стабильно. Полифиллы вроде @js-temporal/polyfill помогут в Safari и мобильных. Браузеры обновляются быстро, так что к 2026 полная поддержка реальна. Тестируйте на edge-кейсах: 29 февраля 2026 или переходы DST.

    Остались нюансы: не все календари в полифиллах, и старый Date никуда не девается - используйте оба переходно. Подумайте о миграции в проектах с датами: начните с PlainDate для форм. Temporal меняет правила игры, но требует привыкания к новым типам. Дальше - глубокий дайв в ZonedDateTime для глобальных apps.

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

    Категории

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

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

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

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

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

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