Найти в Дзене

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


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

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

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

Несколько полезных методов и их 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

Прикрепленные скрины:
1 - Объектная модель
2 - Соотношение между типами в строке Temporal

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

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

2 минуты