Практически любое приложение, написанное на JavaScript, в той или иной степени работает со временем и датами. Вначале это ограничивалось встроенным API Date. Этот API включает в себя базовую функциональность, но его возможности весьма ограничены. Сторонние библиотеки, такие как Moment.js, а также более поздние встроенные API, такие как Intl API и новый Temporal API, добавляют гораздо большую гибкость при работе со временем и датами. Взлет и падение Moment.js Moment.js — это библиотека JavaScript с мощными утилитами для работы со временем и датами. Он включает в себя недостающие функции базового API Date, такие как манипулирование часовыми поясами, и упрощает многие распространенные операции. Moment также включает функции для форматирования даты и времени. Она стала широко используемой библиотекой во многих различных приложениях. Однако у Moment также были свои проблемы. Это большая библиотека, и она может значительно увеличить размер пакета приложения. Поскольку библиотека не поддерживает встряхивание деревьев (функция современных сборщиков, позволяющая удалять неиспользуемые части библиотек), включается вся библиотека Moment, даже если вы используете только одну или две ее функции. Еще одна проблема с Moment заключается в том, что создаваемые им объекты изменяемы. Вызов определенных функций для объекта Moment имеет побочные эффекты и изменяет значение этого объекта. Это может привести к неожиданному поведению или ошибкам. В 2020 году сопровождающие Moment решили перевести библиотеку в режим обслуживания. Никакой разработки новых функций не ведется, и сопровождающие рекомендуют не использовать их в новых проектах. Существуют и другие библиотеки дат JavaScript, такие как date-fns, но в городе появился новый игрок — API, встроенный непосредственно в JavaScript: Temporal. Это новый стандарт, который заполняет пробелы исходного API Date, а также решает некоторые ограничения, обнаруженные в Moment и других библиотеках. Что такое временный? Temporal — это новый API времени и даты, добавляемый в стандарт ECMAScript, который определяет современный JavaScript. По состоянию на март 20266 года он достиг стадии 4 процесса TC39 (комитета, который наблюдает за предложениями и дополнениями к языку JavaScript) и будет включен в следующую версию спецификации ECMAScript. Он уже реализован в нескольких браузерах: Chrome 144+ и ​​Firefox 139+, вскоре ожидается появление Safari. Полифил также доступен для неподдерживаемых браузеров и Node.js. Temporal API создает объекты, которые обычно представляют моменты времени. Это могут быть отметки полного времени и даты в заданном часовом поясе, или они могут быть общим экземпляром времени «настенных часов» без какой-либо информации о часовом поясе или дате. Некоторые из основных особенностей Temporal включают в себя:

Время с датами или без них. Объект Temporal может представлять определенное время определенной даты или время без какой-либо информации о дате. Также может быть представлена ​​конкретная дата без времени. Поддержка часовых поясов. Временные объекты полностью учитывают часовой пояс и могут быть преобразованы в разные часовые пояса. Moment также поддерживает часовые пояса, но для него требуется дополнительная библиотека moment-timezone. Неизменяемость. После создания временного объекта его нельзя изменить. Арифметика времени или преобразования часовых поясов не изменяют базовый объект. Вместо этого они генерируют новый объект Temporal. Индексация на основе 1. Распространенным источником ошибок в Date API (а также в Moment) является то, что месяцы имеют нулевой индекс. Это означает, что январь — это месяц 0, а не месяц 1, как мы все понимаем в реальной жизни. Temporal исправляет это, используя индексацию на основе 1: январь — это месяц 1. Он встроен в браузер. Поскольку Temporal — это API в самом браузере, он ничего не увеличивает размер пакета вашего приложения.

Также важно отметить, что Date API никуда не денется. Хотя Temporal заменяет этот API, он не удаляется и не устаревает. Многие приложения сломались бы, если бы браузеры внезапно удалили Date API. Однако имейте в виду, что Moment теперь считается устаревшим проектом в режиме обслуживания. В оставшейся части статьи мы рассмотрим некоторые «рецепты» миграции кода на основе Moment в новый Temporal API. Начнем рефакторинг! Создание объектов даты и времени Прежде чем мы сможем манипулировать датами и временем, нам необходимо создать объекты, представляющие их. Чтобы создать объект Moment, представляющий текущую дату и время, используйте функцию момента. константа сейчас = момент(); console.log(сейчас); // Момент<2026-02-18T21:26:29-05:00>

Теперь этот объект можно форматировать или манипулировать им по мере необходимости.

// конвертируем в UTC //предупреждение: это изменяет объект Moment и переводит его в режим UTC! console.log(now.utc()); // Момент<2026-02-19T02:26:29Z>

// распечатываем отформатированную строку — обратите внимание, что сейчас используется время UTC console.log(now.format('ММ/ДД/ГГГГ чч:мм:сс а')); // 19.02.2026 02:27:07

Главное, что следует помнить о Moment, — это то, что объект Moment всегда включает информацию о времени и дате. Если вам нужно работать только с информацией о времени, обычно это нормально, но это может привести к неожиданному поведению в таких ситуациях, как переход на летнее время или високосные годы, когда дата может повлиять на расчеты времени. Временное более гибкое. Вы можете создать объект, представляющий текущую дату и время, создав объект Temporal.Instant. Это представляет собой момент времени, определяемый временем, прошедшим с «эпохи» (полночь по всемирному координированному времени 1 января 1970 года). Temporal может ссылаться на этот момент времени с точностью до наносекунды. const now = Temporal.Now.instant();

// видим необработанные наносекунды с начала эпохи console.log(now.epochNanoсекунды); // 1771466342612000000н

// формат для UTC console.log(now.toString()); // 2026-02-19T01:55:27.844Z

// формат для определенного часового пояса console.log(now.toString({ timeZone: 'Америка/Нью_Йорк' })); // 2026-02-18T20:56:57.905-05:00

Объекты Temporal.Instant также можно создавать для определенного времени и даты с помощью статического метода from.

const myInstant = Temporal.Instant.from('2026-02-18T21:10:00-05:00');

// Форматируем момент в местном часовом поясе. Обратите внимание, что это контролирует только // форматирование - оно не изменяет объект, как это делает moment.utc. console.log(myInstant.toString({ timeZone: 'Америка/Нью_Йорк' })); // 2026-02-18T21:10:00-05:00

Вы также можете создавать другие типы временных объектов, в том числе:

Temporal.PlainDate: дата без информации о времени. Temporal.PlainTime: время без информации о дате. Temporal.ZonedDateTime: дата и время в определенном часовом поясе.

У каждого из них есть метод from, который можно вызвать с объектом, указывающим дату и/или время, или строку даты для анализа. // Просто свидание const сегодня = Temporal.PlainDate.from({ год: 2026, месяц: 2, // обратите внимание, что мы используем 2 для февраля день: 18 }); console.log(today.toString()); // 18 февраля 2026 г.

// Просто время const обедTime = Temporal.PlainTime.from({ час: 12 }); console.log(lunchTime.toString()); // 12:00:00

// Дата и время в восточном часовом поясе США const DueAt = Temporal.ZonedDateTime.from({ часовой пояс: «Америка/Нью_Йорк», год: 2026, месяц: 3, день: 1, час: 12, минута: 0, второй: 0 }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[Америка/Нью_Йорк]

Разбор Мы рассмотрели программное создание информации о дате и времени. Теперь давайте посмотрим на синтаксический анализ. Синтаксический анализ — это одна из областей, в которой Moment более гибок, чем встроенный Temporal API. Вы можете проанализировать строку даты, передав ее функции момента. При наличии одного аргумента Moment ожидает строку даты ISO, но вы можете использовать альтернативные форматы, если укажете второй аргумент, определяющий используемый формат даты.

const isoDate = moment('2026-02-21T09:00:00'); const formattedDate = moment('21.02.26 9:00:00', 'М/Д/ГГ ч:мм:сс');

console.log(isoDate); // Момент<2026-02-21T09:00:00-05:00>

console.log(formattedDate); // Момент<2026-02-21T09:00:00-05:00>

В более старых версиях Moment мог бы лучше всего проанализировать любую строку даты произвольного формата. Это может привести к непредсказуемым результатам. Например, 03.02.2026 — это 2 февраля или 3 марта? По этой причине более новые версии Moment отображают заметное предупреждение об устаревании, если он вызывается без строки даты в формате ISO (если также не указан второй аргумент с желаемым форматом). Temporal будет анализировать только специально отформатированную строку даты. Строка должна соответствовать формату ISO 8601 или его расширению RFC 9557. Если в метод from передается несоответствующая строка даты, Temporal выдаст ошибку RangeError.

// Использование строки даты RFC 9557 const myDate = Temporal.Instant.from('2026-02-21T09:00:00-05:00[Америка/Нью_Йорк]'); console.log(myDate.toString({ timeZone: 'Америка/Нью_Йорк' })); // 2026-02-21T09:00:00-05:00

// Использование неизвестной строки даты const OtherDate = Temporal.Instant.from('21.02.26 9:00:00'); // RangeError: Временная ошибка: недопустимый символ при анализе значения года.

Точные требования к строке даты зависят от того, какой тип временного объекта вы создаете. В приведенном выше примере Temporal.Instant требует полного ISO.Строка даты 8601 или RFC 9557, определяющая дату и время со смещением часового пояса, но вы также можете создавать объекты PlainDate или PlainTime, используя только подмножество формата даты. const myDate = Temporal.PlainDate.from('2026-02-21'); console.log(myDate.toString()); // 21 февраля 2026 г.

const myTime = Temporal.PlainTime.from('09:00:00'); console.log(myTime.toString()); // 09:00:00

Обратите внимание, что эти строки по-прежнему должны соответствовать ожидаемому формату, иначе будет выдана ошибка.

// Использование несовместимых строк времени. Все они выдадут RangeError. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00');

Совет для профессионалов: обработка строк, отличных от ISO. Поскольку Temporal отдает приоритет надежности, он не будет пытаться угадать формат строки, например 02-01-2026. Если ваш источник данных использует такие строки, вам нужно будет выполнить некоторые манипуляции со строками, чтобы преобразовать значения в строку ISO, например 2026-02-01, прежде чем пытаться использовать ее с Temporal.

Форматирование Если у вас есть объект Moment или Temporal, вы, вероятно, в какой-то момент захотите преобразовать его в форматированную строку. Это тот случай, когда Moment немного более краток. Вы вызываете метод формата объекта со строкой токенов, описывающих желаемый формат даты. константная дата = момент ();

console.log(date.format('ММ/ДД/ГГГГ')); // 22.02.2026

console.log(date.format('MMMM Do YYYY, h:mm:ss a')); // 22 февраля 2026 г., 20:18:30

С другой стороны, Temporal требует от вас большей многословности. Временные объекты, такие как Instant, имеют метод toLocaleString, который принимает различные параметры форматирования, указанные как свойства объекта.

константная дата = Temporal.Now.instant();

// без аргументов мы получим формат по умолчанию для текущей локали console.log(date.toLocaleString()); // 22.02.2026, 20:23:36 (при условии, что локаль en-US)

// передаем параметры форматирования для создания строки пользовательского формата console.log(date.toLocaleString('en-US', { месяц: 'длинный', день: 'числовой', год: 'числовой', час: '2-значный', минута: '2-значная' })); // 22 февраля 2026 г., 20:23

// передаем в строку формата только те поля, которые вам нужны console.log(date.toLocaleString('en-US', { месяц: «короткий», день: 'числовой' })); // 22 февраля

Временное форматирование даты фактически использует API Intl.DateTimeFormat (который уже доступен в современных браузерах). Это означает, что вы можете создать повторно используемый объект DateTimeFormat со своими собственными параметрами форматирования, а затем передать объекты Temporal в его метод форматирования. Из-за этого он не поддерживает пользовательские форматы даты, как Moment. Если вам нужно что-то вроде «1 квартал 2026 года» или другое специализированное форматирование, вам может понадобиться специальный код форматирования даты или использовать стороннюю библиотеку. const formatter = new Intl.DateTimeFormat('en-US', { месяц: '2-значный', день: '2-значный', год: 'числовой' });

константная дата = Temporal.Now.instant(); console.log(formatter.format(дата)); // 22.02.2026

Токены форматирования Moment проще писать, но они не поддерживают локаль. Строки формата представляют собой «жесткий код», например, порядок месяцев и дней. Преимущество использования объекта конфигурации, как это делает Temporal, заключается в том, что он автоматически адаптируется к любой заданной локали и использует правильный формат. константная дата = Temporal.Now.instant();

const formatOptions = { месяц: 'числовой', день: 'числовой', год: 'числовой' };

console.log(date.toLocaleString('en-US', formatOptions)); // 22.02.2026

console.log(date.toLocaleString('en-GB', formatOptions)); // 22.02.2026

Расчеты дат Во многих приложениях вам придется выполнить некоторые вычисления по дате. Вы можете добавить или вычесть единицы времени (дни, часы, секунды и т. д.). Например, если у вас есть текущая дата, вы можете захотеть показать пользователю дату, которая будет через неделю. У объектов Moment есть такие методы, как сложение и вычитание, которые выполняют эти операции. Эти функции принимают значение и единицу измерения, например: add(7, 'days'). Однако одно очень важное различие между Moment и Temporal заключается в том, что при выполнении этих вычислений даты базовый объект изменяется, а его исходное значение теряется. константа сейчас = момент();

console.log(сейчас); // Момент<2026-02-24T20:08:36-05:00>

const nextWeek = now.add(7, 'дни'); console.log(следующая неделя); // Момент<2026-03-03T20:08:36-05:00>

// Попался — исходный объект был изменен console.log(сейчас); // Момент<2026-03-03T20:08:36-05:00>

Чтобы не потерять исходную дату, вы можете вызвать функцию clone объекта Moment, чтобы создать копию. константа сейчас= момент(); const nextWeek = now.clone().add(7, 'дни');

console.log(сейчас); // Момент<2026-02-24T20:12:55-05:00>

console.log(следующая неделя); // Момент<2026-03-03T20:12:55-05:00>

С другой стороны, временные объекты неизменяемы. После того как вы создали объект, такой как Instant, PlainDate и т. д., значение этого объекта никогда не изменится. Временные объекты также имеют методы сложения и вычитания. Temporal немного требователен к тому, какие единицы времени можно добавлять к каким типам объектов. Например, вы не можете добавлять дни к моменту:

const now = Temporal.Now.instant(); const nextWeek = now.add({дней: 7}); // RangeError: Временная ошибка: самая большая единица не может быть единицей даты

Это связано с тем, что объекты Instant представляют определенный момент времени в формате UTC и не зависят от календаря. Поскольку продолжительность дня может меняться в зависимости от правил часового пояса, таких как летнее время, этот расчет недоступен в мгновенном режиме. Однако вы можете выполнить эту операцию с другими типами объектов, например PlainDateTime: const now = Temporal.Now.plainDateTimeISO(); console.log(now.toLocaleString()); // 24.02.2026, 20:23:59

const nextWeek = now.add({дней: 7});

// Обратите внимание, что исходное PlainDateTime остается неизменным console.log(now.toLocaleString()); // 24.02.2026, 20:23:59

console.log(nextWeek.toLocaleString()); // 03.03.2026, 20:23:59

Вы также можете рассчитать, сколько времени проходит между двумя объектами Moment или Temporal. С помощью функции diff Moment вам необходимо указать единицу детализации, иначе она вернет разницу в миллисекундах. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');

console.log(date2.diff(date1)); // 91800000

console.log(date2.diff(date1, 'days')); // 1

Чтобы сделать это с объектом Temporal, вы можете передать другой объект Temporal его методам до или после. Это возвращает объект Temporal.Duration, содержащий информацию о разнице во времени. Объект Duration имеет свойства для каждого компонента разницы, а также может генерировать строку продолжительности ISO 8601, представляющую разницу во времени.

const date1 = Temporal.PlainDateTime.from('2026-02-21T09:00:00'); const date2 = Temporal.PlainDateTime.from('2026-02-22T10:30:00');

// LargeUnit указывает наибольшую единицу времени для представления // при расчете длительности const diff = date2.since(date1, { LargeUnit: 'day' });

console.log(diff.days); // 1

console.log(diff.hours); // 1

console.log(разница.минуты); // 30

console.log(diff.toString()); // P1DT1H30M // (строка продолжительности ISO 8601: 1 день, 1 час, 30 минут)

Сравнение дат и времени И Moment, и Temporal позволяют сравнивать даты и время, чтобы определить, что наступает раньше другого, но API использует разные подходы. Moment предоставляет такие методы, как isBefore, isAfter и isSame, для сравнения двух объектов Moment. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');

console.log(date1.isBefore(date2)); // правда

Temporal использует статический метод сравнения для сравнения двух объектов одного типа. Он возвращает -1, если первая дата предшествует второй, 0, если они равны, или 1, если первая дата наступает после второй. В следующем примере показано, как сравнить два объекта PlainDate. Оба аргумента Temporal.PlainDate.compare должны быть объектами PlainDate.

const date1 = Temporal.PlainDate.from({год: 2026, месяц: 2, день: 24 }); const date2 = Temporal.PlainDate.from({год: 2026, месяц: 3, день: 24 });

// дата1 предшествует дате2, поэтому -1 console.log(Temporal.PlainDate.compare(date1, date2));

// Ошибка при попытке сравнить два объекта разных типов console.log(Temporal.PlainDate.compare(date1, Temporal.Now.instant())); // Ошибка типа: Временная ошибка: предоставлены неверные поля PlainDate.

В частности, это упрощает сортировку массива объектов Temporal в хронологическом порядке. // Массив объектов Temporal.PlainDate константные даты = [...];

// используем Temporal.PlainDate.compare в качестве функции сравнения даты.сортировка(Temporal.PlainDate.compare);

Преобразование часовых поясов Основная библиотека Moment не поддерживает преобразование часовых поясов. Если вам нужна эта функциональность, вам также необходимо установить пакет moment-timezone. Этот пакет не является древовидным и, следовательно, может значительно увеличить размер вашего пакета. После установки moment-timezone вы можете конвертировать объекты Moment в разные часовые пояса с помощью метода tz. Как и в случае с другими операциями Moment, это изменяет базовыйобъект. // Предполагая восточное время США константа сейчас = момент(); console.log(сейчас); // Момент<2026-02-28T20:08:20-05:00>

// Преобразование в тихоокеанское время. // Исходное восточное время утеряно. now.tz('Америка/Лос_Анжелес'); console.log(сейчас); // Момент<2026-02-28T17:08:20-08:00>

Функциональность часового пояса встроена в Temporal API при использовании объекта Temporal.ZonedDateTime. Эти объекты включают метод withTimeZone, который возвращает новое значение ZonedDateTime, представляющее тот же момент времени, но в указанном часовом поясе. // Опять же, предполагая восточное время США const now = Temporal.Now.zonedDateTimeISO(); console.log(now.toLocaleString()); // 28.02.2026, 20:12:02 по восточному стандартному времени

// Преобразование в тихоокеанское время const nowPacific = now.withTimeZone('Америка/Лос_Анжелес'); console.log(nowPacific.toLocaleString()); // 28.02.2026, 17:12:02 по тихоокеанскому времени

// Исходный объект остается неизменным console.log(now.toLocaleString()); // 28.02.2026, 20:12:02 по восточному стандартному времени

Примечание. Форматированные значения, возвращаемые toLocaleString, как следует из названия, зависят от локали. Пример кода был разработан в языковом стандарте en-US, поэтому его формат следующий: 28 февраля 2026 г., 17:12:02 по тихоокеанскому стандартному времени. В другом регионе все может быть иначе. Например, в локали en-GB вы получите что-то вроде 28/2/2026, 17:12:02 GMT-8. Реальный рефакторинг Предположим, мы создаем приложение для планирования событий в разных часовых поясах. Частью этого приложения является функция getEventTimes, которая принимает строку ISO 8601, представляющую время и дату события, местный часовой пояс и целевой часовой пояс. Функция создает форматированные строки времени и даты для события в обоих часовых поясах. Если функции передана входная строка, которая не является допустимой строкой времени/даты, она выдаст ошибку. Вот исходная реализация с использованием Moment (также требующая использования пакета moment-timezone).

импортировать момент из «момент-часовой пояс»;

функция getEventTimes(inputString, userTimeZone, targetTimeZone) { const timeFormat = 'МММ Д, ГГГГ, ч: мм: сс а z';

// 1. Создаём начальный момент в часовом поясе пользователя const eventTime = moment.tz( входная строка, moment.ISO_8601, // Ожидаем строку ISO 8601 true, // Строгий анализ пользовательTimeZone );

// Выдаем ошибку, если входная строка не представляет действительную дату если (!eventTime.isValid()) { выдать новую ошибку («Неверный ввод даты и времени»); }

// 2. Вычисляем целевое время // ВАЖНО: мы должны клонировать, иначе eventTime изменится навсегда! const targetTime = eventTime.clone().tz(targetTimeZone);

вернуть { локальный: eventTime.format(timeFormat), цель: targetTime.format(timeFormat), }; }

константное расписание = getEventTimes( '2026-03-05T15:00-05:00', 'Америка/Нью_Йорк', «Европа/Лондон», );

console.log(расписание.локальный); // 5 марта 2026 г., 15:00:00 по восточному стандартному времени

console.log(расписание.цель); // 5 марта 2026 г., 20:00:00 по Гринвичу

В этом примере мы используем ожидаемый формат даты ISO 8601, который встроен в Moment. Мы также используем строгий синтаксический анализ, что означает, что Moment не будет пытаться угадать строку даты, которая не соответствует формату. Если будет передана строка даты, отличная от ISO, это приведет к недопустимому объекту даты, и мы выдадим ошибку. Реализация Temporal выглядит похоже, но имеет несколько ключевых отличий.

функция getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. Разбираем входные данные непосредственно в Instant, затем создаем // ZonedDateTime в зоне пользователя. const Instant = Temporal.Instant.from(inputString); const eventTime = Instant.toZonedDateTimeISO(userTimeZone);

// 2. Преобразование в целевую зону // Это автоматически возвращает НОВЫЙ объект; «eventTime» безопасно. const targetTime = eventTime.withTimeZone(targetTimeZone);

// 3. Форматирование с использованием Intl (встроенное) константные параметры = { год: 'числовой', месяц: «короткий», день: 'числовой', час: 'числовой', минута: '2-значный', второй: '2-значный', timeZoneName: 'короткий' };

вернуть { локальный: eventTime.toLocaleString(navigator.language, options), цель: targetTime.toLocaleString(navigator.language, options) }; }

константное расписание = getEventTimes( '2026-03-05T15:00-05:00', 'Америка/Нью_Йорк', «Европа/Лондон», );

console.log(расписание.локальный); // 5 марта 2026 г., 15:00:00 по восточному стандартному времени

console.log(расписание.цель); // 5 марта 2026 г., 20:00:00 по Гринвичу

В Moment нам необходимо явно указать строку формата для результирующих строк даты. Независимо от местоположения или региона пользователя время событий всегда будет иметь формат 5 марта 2026 г., 3:00:00.вечера по восточному стандартному времени. Кроме того, нам не нужно явно вызывать исключение. Если в Temporal.Instant.from передана недопустимая строка, Temporal выдаст нам исключение. Следует отметить, что даже при строгом анализе версия Moment все еще более снисходительна. Temporal требует смещения часового пояса в конце строки. Также следует отметить, что, поскольку мы используем navigator.language, этот код будет работать только в среде браузера, поскольку навигатор не определен в среде Node.js. Реализация Temporal использует текущую локаль браузера (navigator.language), поэтому пользователь автоматически получит время событий в формате местного времени. В локали en-US это 5 марта 2026 г., 15:00:00 по восточному стандартному времени. Однако если пользователь находится, например, в Лондоне, время событий будет отформатировано как 5 марта 2026 года, 15:00:00 GMT-5. Резюме

Действие Момент.js Временной Текущее время момент() Temporal.Now.zonedDateTimeISO() Разбор ISO момент(ул) Temporal.Instant.from(str) Добавить время .add(7, 'дни') (мутирует) .add({ дней: 7 }) (новый объект) Разница .diff(другое, «часы») .с(другое).часы Часовой пояс .tz('Зона/Имя') .withTimeZone('Зона/Имя')

На первый взгляд разница может заключаться в немного другом (а в случае Temporal иногда более подробном и более строгом) синтаксисе, но есть несколько ключевых преимуществ использования Temporal перед Moment.js:

Более явная информация означает меньше сюрпризов и непреднамеренных ошибок. Момент может показаться более мягким, но он предполагает «догадки», которые иногда могут привести к неверным датам. Если вы укажете Temporal что-то недопустимое, он выдаст ошибку. Если код работает, вы знаете, что у вас есть действительная дата. Moment может значительно увеличить размер пакета приложения, особенно если вы используете пакет moment-timezone. Temporal ничего не добавляет (после того, как он будет добавлен в ваши целевые браузеры). Неизменяемость дает вам уверенность в том, что вы никогда не потеряете и не перезапишете данные при выполнении преобразований дат и операций. Различные представления времени (Instant, PlainDateTime, ZonedDateTime) в зависимости от ваших требований, где Moment всегда является оболочкой вокруг метки времени UTC. Temporal использует API Intl для форматирования даты, что означает, что вы можете использовать форматирование с учетом локали без необходимости явного указания токенов.

Примечания к Polyfill Как упоминалось ранее, доступен полифил Temporal, распространяемый как пакет npm с именем @js-temporal/polyfill. Если вы хотите использовать Temporal сегодня, вам понадобится этот полифилл для поддержки таких браузеров, как Safari, которые еще не предоставили API. Плохая новость в том, что это увеличит размер вашего пакета. Хорошей новостью является то, что он по-прежнему добавляет значительно меньше, чем момент или момент-часовой пояс. Вот сравнение размеров пакетов по данным Bundlephobia.com, веб-сайта, на котором представлена информация о размерах пакетов npm (нажмите на имя каждого пакета, чтобы просмотреть анализ Bundlephobia):

Пакет Минимизированный Минимизированный и заархивированный @js-temporal/polyfill 154,1 КБ 44,1 КБ момент 294,4 КБ 75,4 КБ момент-часовой пояс 1 МБ 114,2 КБ

Полифил также исторически имел некоторые проблемы с производительностью, связанные с использованием памяти, и на момент написания статьи он находился в альфа-состоянии. По этой причине вы, возможно, не захотите использовать его в производстве, пока он не достигнет более зрелого состояния. Другая хорошая новость заключается в том, что, надеюсь, полифилл больше не понадобится (если, конечно, вам не нужна поддержка старых браузеров). На момент написания Temporal поставляется в Chrome, Edge и Firefox. Он еще не совсем готов в Safari, хотя, похоже, он доступен с флагом времени выполнения в последней версии Technology Preview.

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free