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

Temporal API: как JavaScript решает проблемы с датами и временем

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

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

    С Temporal код становится предсказуемым и безопасным. Нет больше неожиданных изменений дат или ошибок из-за DST. Это упрощает жизнь фронтенд-разработчикам, особенно в приложениях с расписаниями и событиями.

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

    Классический объект Date в JavaScript мутирует значения при операциях, что приводит к багам. Например, добавление дня к 31 декабря меняет исходную дату, и завтрашний день может стать сегодняшним. Парсинг строк вроде “2025-04-09” работает нестабильно - иногда как UTC, иногда как локальное время.

    Temporal вводит иммутабельные классы: все методы возвращают новые объекты, а не меняют старые. Это делает код проще для понимания и отладки. Плюс встроенная поддержка часовых поясов и календарей - никаких внешних библиотек вроде Moment.js.

    • PlainDate: дата без времени и пояса, идеальна для дней рождения или сроков. Пример: Temporal.PlainDate.from('2025-04-09') дает объект с year, month, day.
    • PlainTime: только время, без даты. Полезно для расписаний: Temporal.PlainTime.from('14:30:00').
    • ZonedDateTime: дата-время с поясом, автоматически учитывает DST. Temporal.Now.zonedDateTimeISO('Europe/Moscow').
    Свойство Date Проблема Temporal решение
    Мутации setDate() меняет объект Иммутабельность, новые объекты
    Часовые пояса Неявный локальный Явные ZonedDateTime
    Парсинг Ненадежный Строгий ISO 8601

    Основные классы Temporal для повседневных задач

    Temporal.Now - это точка входа для текущего времени. Temporal.Now.plainDateISO() вернет сегодняшнюю дату без лишнего, а Temporal.Now.instant() - момент в UTC с наносекундами. Это удобно для логов или API-запросов.

    Duration позволяет считать разницу между датами. Добавление интервалов не ломает логику - API сам обрабатывает переходы месяцев. Например, 31 января + 1 месяц становится 28 февраля в невисокосный год, без ошибок.

    Вот примеры создания и операций:

    • const date = Temporal.PlainDate.from({year: 2025, month: 4, day: 9}); date.add({days: 1}); - добавляет день, возвращает новый объект.
    • const duration = date.until(Temporal.Now.plainDateISO()); - разница в днях, месяцах.
    • Instant: точный момент глобально. Temporal.Instant.fromEpochSeconds(1234567890) для timestamp.

    Ключевой плюс: все классы поддерживают цепочки методов, как date.with({month: 5}).add({years: 1}).

    Работа с часовыми поясами и календарями

    Часовые пояса - вечный кошмар Date. В Temporal они задаются явно: ‘America/New_York’ или ‘Asia/Tokyo’. ZonedDateTime конвертирует времена автоматически, учитывая летнее время.

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

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

    1. Текущее время в Москве: Temporal.Now.zonedDateTimeISO('Europe/Moscow').toString() - ‘2026-03-02T12:00:00+03:00[Europe/Moscow]’.
    2. Конверсия: zoned.withTimeZone('UTC') - меняет пояс без сдвига момента.
    3. Нюанс: неоднозначности DST разрешаются опциями ‘earliest’ или ‘latest’.
    Класс Когда использовать Пример
    PlainDateTime Локальное дата-время События без пояса
    ZonedDateTime Глобальные встречи Zoom с разными зонами
    Duration Расчеты интервалов Сроки задач

    Temporal в production: что дает на практике

    Temporal уже в Chrome 144 и Firefox Nightly, полная поддержка ожидается в 2026. Заменяет библиотеки, снижая бандл-сайз. Код чище: нет геттеров-сеттеров, все declarative.

    Для фронтенда это прорыв в календарях, чатах, e-commerce. Вычисления предсказуемы, тесты проще. Осталось дождаться полифиллов для старых браузеров и инструментов вроде TypeScript.

    Можно углубиться в редкие случаи: нестандартные календари или микросекундную точность. Или подумать, как Temporal интегрируется с Web APIs вроде Intl.

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

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

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

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

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

    Категории

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

    Контакты

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

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

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

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

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