<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Temporal API в ECMAScript 2026: конец проблем Date]]></title><description><![CDATA[<p dir="auto">Temporal API наконец-то меняет подход к датам в JavaScript. Этот новый стандарт из ECMAScript 2026 решает старые боли объекта Date: мутации, неясный парсинг и проблемы с часовыми поясами. Теперь разработчики получат надежные инструменты для работы с временем без библиотек вроде date-fns.</p>
<p dir="auto">С Temporal код становится предсказуемым и безопасным. Представьте: даты без случайных таймзон, неизменяемые значения и простая арифметика. Это спасет часы отладки в проектах с международными пользователями. Давайте разберем, как это работает на практике.</p>
<h2>Почему Date устарел и как Temporal его заменяет</h2>
<p dir="auto">Объект Date в JavaScript мучил разработчиков десятилетиями. Парсинг строк вроде ‘2026-03-01’ зависит от локали браузера, что приводит к ошибкам. Арифметика мутирует объект, а таймзоны обрабатываются хаотично - иногда с UTC, иногда локально. Temporal вводит отдельные типы для разных задач: PlainDate для дат без времени, ZonedDateTime для дат с поясом.</p>
<p dir="auto">Все типы неизменяемы - методы возвращают новые объекты, а не меняют старые. Это предотвращает баги от неожиданных мутаций. Парсинг стал строгим: Temporal.PlainDate.from(‘2026-02-13’) всегда создаст дату без времени и зоны. В Chrome 144 это уже стабильно работает, хотя Safari отстает.</p>
<p dir="auto">Вот ключевые типы Temporal и их применение:</p>
<ul>
<li><strong>PlainDate</strong>: дата без времени. Идеально для дней рождения или сроков. Пример: <code>Temporal.PlainDate.from('2026-02-13').add({ days: 7 })</code> вернет 2026-02-20.</li>
<li><strong>PlainTime</strong>: только время. Полезно для расписаний: <code>Temporal.PlainTime.from('14:30:00')</code>.</li>
<li><strong>ZonedDateTime</strong>: дата, время и пояс. <code>Temporal.Now.zonedDateTimeISO('Europe/Moscow')</code> даст точное время в Москве.</li>
<li><strong>Instant</strong>: абсолютный момент в UTC. Для логов и серверных меток.</li>
<li><strong>Duration</strong>: интервалы. <code>Temporal.Duration.from({ days: 5, hours: 3 })</code> для вычислений.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Свойство</th>
<th>Date</th>
<th>Temporal</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Неизменяемость</strong></td>
<td>Мутации</td>
<td>Новые объекты</td>
</tr>
<tr>
<td><strong>Парсинг</strong></td>
<td>Локаль-зависимый</td>
<td>Строгий ISO</td>
</tr>
<tr>
<td><strong>Таймзоны</strong></td>
<td>Смешанные</td>
<td>Явные типы</td>
</tr>
<tr>
<td><strong>Календари</strong></td>
<td>Только григорианский</td>
<td>Множество</td>
</tr>
</tbody>
</table>
<h2>Основные типы Temporal на примерах</h2>
<p dir="auto">Temporal предлагает namespace с классами вроде PlainDateTime, PlainYearMonth и PlainMonthDay. Каждый тип решает конкретную задачу: PlainYearMonth для подписок (‘2026-03’), PlainMonthDay для праздников (14 февраля). Арифметика простая и безопасная - add, subtract возвращают новые экземпляры.</p>
<p dir="auto">Рассмотрим реальный сценарий: планировщик задач. С Date пришлось бы вручную корректировать зоны и парсить ISO. Temporal.Now.plainDateISO() даст сегодняшнюю дату, а .add({ weeks: 1 }) - будущую без сюрпризов. Форматирование через toLocaleString() использует ECMA-402 для локализации.</p>
<p dir="auto">Практические примеры кода:</p>
<ol>
<li>Добавление дней: <code>const date = Temporal.PlainDate.from({ year: 2026, month: 3, day: 1 }); const next = date.add({ days: 30 }); console.log(next.toString()); // 2026-03-31</code></li>
<li>Разница дат: <code>const diff = date.until(next); console.log(diff.days); // 30</code></li>
<li>Зона: <code>const zoned = Temporal.ZonedDateTime.from('2026-03-01T10:00:00[Europe/Moscow]');</code></li>
</ol>
<p dir="auto"><strong>Важно</strong>: Temporal поддерживает не только ISO, но и другие календари - японский, буддистский. Это упрощает apps для Азии.</p>
<h2>Арифметика и работа с Duration</h2>
<p dir="auto">Duration - сердце арифметики в Temporal. Этот класс представляет интервалы: дни, часы, минуты. Методы like({ hours: 2 }) нормализуют значения, учитывая високосные годы. Сравните с Date: new Date(date.getTime() + 86400000) может сдвинуть время из-за DST.</p>
<p dir="auto">Temporal.Now.instant() дает точный момент для сервер-клиент синхронизации. Метод until() между датами возвращает Duration. Это идеально для дашбордов: вычисление <em>overtime</em> или сроков поставок без ошибок.</p>
<p dir="auto">Преимущества Duration:</p>
<ul>
<li><em>Нормализация</em>: 25 часов станет 1 день + 1 час.</li>
<li><strong>Арифметика</strong>: duration.add(otherDuration) без мутаций.</li>
<li>Поддержка отрицательных значений для разниц в прошлом.</li>
</ul>
<p dir="auto">Таблица сравнения операций:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Операция</th>
<th>Date пример</th>
<th>Temporal пример</th>
</tr>
</thead>
<tbody>
<tr>
<td>+1 день</td>
<td>date.setDate(date.getDate() + 1)</td>
<td>date.add({ days: 1 })</td>
</tr>
<tr>
<td>Разница</td>
<td>date2 - date1</td>
<td>date2.until(date1)</td>
</tr>
<tr>
<td>Формат</td>
<td>toISOString()</td>
<td>toString() с опциями</td>
</tr>
</tbody>
</table>
<h2>Temporal в production: что учесть</h2>
<p dir="auto">Несмотря на Stage 3, Chrome 144 уже использует Temporal стабильно. Полифиллы вроде @js-temporal/polyfill помогут в Safari и мобильных. Браузеры обновляются быстро, так что к 2026 полная поддержка реальна. Тестируйте на edge-кейсах: 29 февраля 2026 или переходы DST.</p>
<p dir="auto">Остались нюансы: не все календари в полифиллах, и старый Date никуда не девается - используйте оба переходно. Подумайте о миграции в проектах с датами: начните с PlainDate для форм. Temporal меняет правила игры, но требует привыкания к новым типам. Дальше - глубокий дайв в ZonedDateTime для глобальных apps.</p>
]]></description><link>https://forum.exlends.ru/topic/875/temporal-api-v-ecmascript-2026-konec-problem-date</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:25:19 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/875.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Mar 2026 10:19:11 GMT</pubDate><ttl>60</ttl></channel></rss>