🔥 Боль работы с JS объектом Date закончится в этом году

Объектная модель
Объектная модель

В 2024 году JavaScript получил много обновлений и новых функций, которые находятся на 3 и 4 стадии:

  • 3 стадия - Функция принята, но ещё рассматривается как проект и может значительно измениться. Тем не менее, в конечном итоге её включат в стандарт, за исключением маловероятных причин
  • 4 стадия - Функция одобрена и находится на стадии валидации. Изменения больше не запрашиваются, кроме необходимых доработок, выявленных при тестировании

Сегодня рассмотрим Temporal API — глобальный объект, который улучшает работу с датой и временем. Одна из его особенностей — использование отдельных классов для даты и времени. На данный момент Temporal API находится на 3 стадии.

Соотношение между типами в строке Temporal
Соотношение между типами в строке Temporal

Несколько полезных методов и их API:

Temporal.Now - предоставляет методы для получения текущего времени и даты.

Temporal.Now.instant(): Temporal.Instant - возвращает текущее системное время.

Temporal.Now.timeZoneId(): string - возвращает текущую системную тайм-зону.

Temporal.Now.zonedDateTimeISO(timeZone: object | string = Temporal.Now.timeZone()) : Temporal.ZonedDateTime - возвращает текущие дату и время в текущем часовом поясе в формате ISO.

Temporal.Now.plainDateISO(timeZone: object | string = Temporal.Now.timeZone()) : Temporal.PlainDate - возвращает текущую дату в текущем часовом поясе в формате ISO

Temporal.Now.plainTimeISO(timeZone: object | string = Temporal.Now.timeZone()) : Temporal.PlainTime - возвращает текущее время в текущем часовом поясе в формате ISO

Temporal.Now.plainDateTimeISO(timeZone: object | string = Temporal.Now.timeZone()) : Temporal.PlainDateTime - возвращает дату и время вместе.

Приведу несколько примеров:

Temporal.Now.instant(); // => 2024-10-27T16:12:31.894551894Z Temporal.Now.zonedDateTimeISO(); // => 2024-10-27T21:13:09.095589095+05:00[Asia/Yekaterinburg] Temporal.Now.plainDateISO()); // => 2024-10-27

Temporal.Instant - предоставляет фиксированную точку во времени ("exact time") без учёта календаря и местоположения.

Примеры:

instant = Temporal.Instant.from('2020-01-01T00:00+05:30'); // => 2019-12-31T18:30:00Z instant.epochNanoseconds; // => 1577817000000000000n // `Temporal.Instant` не имеет свойств зависящих от часового пояса или календаря instant.year; // => undefined zdtTokyo = instant.toZonedDateTimeISO('Asia/Tokyo'); // => 2020-01-01T03:30:00+09:00[Asia/Tokyo] zdtTokyo.year; // => 2020 zdtTokyo.toPlainDate(); // => 2020-01-01

Temporal.PlainDate - календарная дата, не связанная с определённым временем или часовым поясом. По такому же принципу работают Temporal.PlainTime, Temporal.PlainDateTime, Temporal.PlainYearMonth и Temporal.PlainMonthDay.

Примеры:

const date = Temporal.PlainDate.from({ year: 2025, month: 1, day: 3 }); console.log(date.year); // => 2006 console.log(date.inLeapYear); // => false console.log(date.toString()); // => '2025-01-03'

Temporal.Duration - представляет временной отрезок. Его можно использовать для арифметики с датами или для вычисления разницы между временными объектами

Примеры:

const duration = Temporal.Duration.from({ hours: 999, minutes: 59 }); console.log(duration.total({ unit: 'second' })); // => 3599940 console.log(duration.total({ unit: 'minute' })); // => 59999 console.log(duration.total({ unit: 'hour' })); // => 999.9833333333333

🧐 Как вы думаете, облегчит ли этот глобальный объект работу с датой и временем или все же нет?
🧐 Будете ли использовать Temporal вместо Date, когда он будет доступен и безопасен в разработке?

Буду рад любой обратной связи (коммент, реакция) ❤

Больше о фронтенд разработке в моем ТГК:

Начать дискуссию