🔥 Боль работы с 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 минуты
29 октября 2024