Речиси секој вид на апликација напишана во JavaScript работи со времиња или датуми во одреден капацитет. На почетокот, ова беше ограничено на вградениот Date API. Овој API вклучува основна функционалност, но е доста ограничен во она што може да го направи. Библиотеките од трети страни како Moment.js, а подоцна и вградените API како што се Intl API и новиот Temporal API, додаваат многу поголема флексибилност во работата со времиња и датуми. Подемот и падот на моментот.js Moment.js е JavaScript библиотека со моќни алатки за работа со времиња и датуми. Вклучува функции што недостасуваат од основниот Date API, како што е манипулацијата со временската зона и ги прави многу вообичаени операции поедноставни. Moment вклучува и функции за форматирање датуми и времиња. Таа стана широко користена библиотека во многу различни апликации. Сепак, и Момент имаше свој дел од проблемите. Тоа е голема библиотека и може значително да ја зголеми големината на пакетот на апликацијата. Бидејќи библиотеката не поддржува тресење на дрвјата (карактеристика на модерните пакети што може да ги отстранат неискористените делови од библиотеките), целата библиотека Moment е вклучена дури и ако користите само една или две нејзини функции. Друг проблем со Moment е фактот дека објектите што ги создава се променливи. Повикувањето на одредени функции на објектот Moment има несакани ефекти и ја мутира вредноста на тој објект. Ова може да доведе до неочекувано однесување или грешки. Во 2020 година, одржувачите на Moment одлучија да ја стават библиотеката во режим на одржување. Не се прави развој на нови функции, а одржувачите препорачуваат да не се користат за нови проекти. Има и други JavaScript библиотеки со датуми, како што е date-fns, но има нов играч во градот, API вграден директно во JavaScript: Temporal. Тоа е нов стандард кој ги пополнува дупките на оригиналниот Date API, како и решава некои од ограничувањата пронајдени во Moment и другите библиотеки. Што е временско? Temporal е ново време и датум API што се додава во стандардот ECMAScript, кој го дефинира модерниот JavaScript. Почнувајќи од март 20266 година, стигна до Фаза 4 од процесот TC39 (комисијата што ги надгледува предлозите и дополнувањата на јазикот JavaScript) и ќе биде вклучена во следната верзија на спецификацијата ECMAScript. Веќе е имплементиран во неколку прелистувачи: Chrome 144+ и ​​Firefox 139+, а наскоро се очекува да следи и Safari. Достапно е полифил за неподдржани прелистувачи и Node.js. Временскиот API создава објекти кои, генерално, претставуваат моменти во времето. Овие можат да бидат печати со полно работно време и датуми во дадена временска зона, или може да бидат генерички пример за времето на „ѕиден часовник“ без никакви информации за временската зона или датумот. Некои од главните карактеристики на Temporal вклучуваат:

Времиња со или без датуми. Временскиот објект може да претставува одредено време на одреден датум или време без никакви информации за датумот. Може да се претстави и конкретен датум, без време. Поддршка за временска зона. Временските објекти се целосно свесни за временската зона и може да се конвертираат во различни временски зони. Moment поддржува и временски зони, но бара дополнителна библиотека на момент-временска зона. Непроменливост. Откако ќе се создаде временски објект, тој не може да се промени. Временската аритметика или конверзијата на временската зона не го менуваат основниот објект. Наместо тоа, тие генерираат нов Temporal објект. Индексирање базирано на 1. Вообичаен извор на грешки со Date API (како и со Moment) е тоа што месеците се индексирани со нула. Ова значи дека јануари е месец 0, наместо месец 1 како што сите го разбираме во реалниот живот. Временскиот го поправа ова со користење на индексирање базирано на 1 - јануари е месец 1. Вграден е во прелистувачот. Бидејќи Temporal е API во самиот прелистувач, тој не додава ништо на големината на пакетот на вашата апликација.

Исто така, важно е да се забележи дека Date API не исчезнува. Додека Temporal го заменува ова API, тој не се отстранува или застарува. Многу апликации би се скршиле доколку прелистувачите ненадејно го отстранат Date API. Сепак, имајте на ум дека Moment сега се смета за наследен проект во режим на одржување. Во остатокот од статијата, ќе разгледаме некои „рецепти“ за мигрирање на кодот базиран на момент на новиот Temporal API. Да почнеме со рефакторирање! Креирање на објекти за датум и време Пред да можеме да манипулираме со датуми и времиња, треба да создадеме објекти што ги претставуваат. За да креирате објект Moment што ги претставува тековниот датум и време, користете ја функцијата момент. const now = 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('MM/DD/YYYY hh:mm:ss a')); // 19.02.2026 02:27:07 часот

Клучното нешто што треба да се запамети за Moment е дека објектот Moment секогаш вклучува информации за времето и датумот. Ако треба да работите само со информации за времето, ова е обично во ред, но може да предизвика неочекувано однесување во ситуации како летно сметање на времето или престапни години, каде датумот може да има ефект врз пресметките на времето. Временската е пофлексибилна. Можете да креирате објект што ги претставува тековниот датум и време со креирање на објект Temporal.Instant. Ова претставува временска точка дефинирана со времето од „епохата“ (полноќ UTC на 1 јануари 1970 година). Темпорал може да го референцира овој момент во времето со прецизност на ниво на наносекунда. const now = Temporal.Now.instant();

// види необработени наносекунди од епохата console.log(now.epochNanoseconds); // 1771466342612000000n

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

// формат за одредена временска зона console.log(now.toString({ timeZone: 'America/New_York' })); // 2026-02-18T20:56:57.905-05:00

Временски.Инстант објектите може да се креираат и за одредено време и датум со користење на методот од статички.

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

// Форматирајте го инстантот во локалната временска зона. Забележете дека ова само контролира // форматирањето - не мутира на објектот како што прави moment.utc. console.log(myInstant.toString({ timeZone: 'America/New_York' })); // 2026-02-18T21: 10:00-05:00

Можете исто така да креирате други типови на временски објекти, вклучувајќи:

Temporal.PlainDate: Датум без информации за времето. Temporal.PlainTime: Време без информации за датумот. Temporal.ZonedDateTime: Датум и време во одредена временска зона.

Секој од нив има метод од од кој може да се повика со објект кој го одредува датумот и/или времето, или низа со датум за анализа. // Само датум const today = Temporal.PlainDate.from({ година: 2026 година, месец: 2, // забележете дека користиме 2 за февруари ден: 18 }); console.log(today.toString()); // 2026-02-18

// Само време const lunchTime = 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('2/21/26 9:00:00', 'M/D/YY h:mm:ss');

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

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

Во постарите верзии, Moment најдобро би можел да претпостави за анализа на која било произволно форматирана низа за датум. Ова може да доведе до непредвидливи резултати. На пример, дали 02-03-2026 е 2 февруари или 3 март? Поради оваа причина, поновите верзии на Moment прикажуваат истакнато предупредување за застарување ако се повика без низа за датум форматирана ISO (освен ако е даден и вториот аргумент со саканиот формат). Temporal ќе анализира само конкретно форматирана низа за датум. Низата мора да биде усогласена со форматот ISO 8601 или со неговата екстензија, RFC 9557. Ако неусогласената низа за датум е предадена на методот од, Temporal ќе фрли Range Error.

// Користење на низа за датум RFC 9557 const myDate = Temporal.Instant.from('2026-02-21T09:00:00-05:00[Америка/Њу_Јорк]'); console.log(myDate.toString({ timeZone: 'America/New_York' })); // 2026-02-21T09:00:00-05:00

// Користење на низа за непознат датум const otherDate = Temporal.Instant.from('2/21/26 9:00:00'); // Range Error: Временска грешка: неважечки знак додека се анализира вредноста на годината.

Точните барања на низата за датум зависат од тоа каков вид Временски објект создавате. Во горниот пример, Temporal.Instant бара целосен ISO8601 или RFC 9557 низа за датум што ги одредува датумот и времето со поместување на временската зона, но исто така можете да креирате објекти PlainDate или PlainTime користејќи само подмножество од форматот на датумот. const myDate = Temporal.PlainDate.from('2026-02-21'); console.log(myDate.toString()); // 2026-02-21

const myTime = Temporal.PlainTime.from('09:00:00'); console.log(myTime.toString()); // 09:00:00 часот

Забележете дека овие низи сепак мора да се усогласат со очекуваниот формат, или ќе се фрли грешка.

// Користење на временски низи кои не се усогласени. Сите овие ќе исфрлат грешка во опсегот. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00 AM');

Професионален совет: Ракување со низи што не се ISO, бидејќи Temporal има приоритет на доверливоста, нема да се обидува да го погоди форматот на низа како 02-01-2026. Ако вашиот извор на податоци користи такви низи, ќе треба да направите некоја манипулација со низата за да ги преуредите вредностите во низа ISO како 2026-02-01 пред да се обидете да ја користите со Temporal.

Форматирање Откако ќе имате момент или темпорален објект, веројатно ќе сакате да го конвертирате во форматирана низа во одреден момент. Ова е пример кога Моментот е малку пократок. Го повикувате методот на форматирање на објектот со низа токени кои го опишуваат саканиот формат на датум. const date = moment();

console.log(датум.формат('ММ/ДД/ГГГГ')); // 22.02.2026

console.log(date.format('MMMM Do YYYY, h:mm:ss a')); // 22 февруари 2026 година, 20:18:30 часот

Од друга страна, „Темпорал“ бара од вас да бидете малку поразбирливи. Временските објекти, како што е Instant, имаат метод toLocaleString кој прифаќа различни опции за форматирање наведени како својства на објектот.

const date = Temporal.Now.instant();

// без аргументи, ќе го добиеме стандардниот формат за тековната локација console.log(date.toLocaleString()); // 22.2.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 февруари

Форматирањето на временскиот датум всушност го користи Intl.DateTimeFormat API (кој веќе е лесно достапен во современите прелистувачи) под капакот. Тоа значи дека можете да креирате повторно употреблив објект DateTimeFormat со вашите сопствени опции за форматирање, а потоа да ги префрлите временските објекти на неговиот метод на форматирање. Поради ова, не поддржува прилагодени формати на датуми како што ги поддржува Moment. Ако ви треба нешто како „Q1 2026“ или друго специјализирано форматирање, можеби ќе ви треба приспособена шифра за форматирање на датумот или посетете библиотека од трета страна. const formatter = new Intl.DateTimeFormat('en-US', { месец: „2-цифрена“, ден: „2-цифрена“, година: „нумерички“ });

const date = Temporal.Now.instant(); console.log(formatter.format(датум)); // 22.02.2026

Токените за форматирање на Moment се поедноставни за пишување, но тие не се погодни за локално ниво. Форматот содржи „тврд код“ работи како редослед месец/ден. Предноста на користењето конфигурациски објект, како што тоа го прави Temporal, е тоа што автоматски ќе се прилагоди на која било дадена локација и ќе го користи правилниот формат. const date = Temporal.Now.instant();

const formatOptions = { месец: „нумерички“, ден: „нумерички“, година: „нумерички“ };

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

console.log(date.toLocaleString('en-GB', formatOptions)); // 22/02/2026

Пресметки за датум Во многу апликации, ќе треба да завршите со извршување на некои пресметки на датум. Можеби ќе сакате да додавате или одземате единици време (денови, часови, секунди, итн.). На пример, ако го имате тековниот датум, можеби ќе сакате да му го покажете на корисникот датумот за 1 недела од сега. Моментните објекти имаат методи како што се собирање и одземање кои ги извршуваат овие операции. Овие функции земаат вредност и единица, на пример: add(7, 'денови'). Меѓутоа, една многу важна разлика помеѓу Moment и Temporal е тоа што при извршување на овие пресметки на датумот, основниот објект се менува и неговата оригинална вредност се губи. const now = moment();

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>

За да избегнете губење на оригиналниот датум, можете да повикате клон на објектот 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 и така натаму, вредноста на тој објект никогаш нема да се промени. Временските објекти имаат и методи за собирање и одземање. Временскиот е малку пребирлив за тоа кои временски единици може да се додадат на кој тип на објект. На пример, не можете да додавате денови на Инстант:

const now = Temporal.Now.instant(); const nextWeek = now.add({ дена: 7 }); // Range Error: Временска грешка: Најголемата единица не може да биде единица за датум

Тоа е затоа што Инстант објектите претставуваат одредена временска точка во 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()); // 3/3/2026, 20:23:59

Можете исто така да пресметате колку време е помеѓу два моментни или временски објекти. Со функцијата Moment’s diff, треба да обезбедите единица за грануларност, во спротивно таа ќе ја врати разликата во милисекунди. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');

конзола.лог (датум2.разлика(датум1)); // 91800000

console.log(date2.diff(датум1, 'денови')); // 1

За да го направите ова со временски објект, можете да пренесете друг темпорален објект на неговите методи до или потоа. Ова враќа објект 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');

// greatestUnit ја одредува најголемата единица време за претставување // во пресметката на времетраењето const diff = date2.since(датум1, { НајголемаЕдиница: 'ден' });

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

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

console.log(diff.minutes); // 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');

конзола.лог (датум1.исПред(датум2)); // точно

Темпорал користи метод на статичко споредување за да изврши споредба помеѓу два објекти од ист тип. Враќа -1 ако првиот датум доаѓа пред вториот, 0 ако се еднакви или 1 ако првиот датум доаѓа по вториот. Следниот пример покажува како да се споредат два објекти PlainDate. Двата аргументи на Temporal.PlainDate.compare мора да бидат објекти PlainDate.

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

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

// Грешка ако се обидеме да споредиме два објекти од различни типови console.log(Temporal.PlainDate.compare(датум1, Temporal.Now.instant())); // TypeError: Временска грешка: Обезбедени се неважечки полиња PlainDate.

Особено, ова го олеснува хронолошки сортирањето низа од временски објекти. // Низа од објекти Temporal.PlainDate Const датуми = [ ... ];

// користете Temporal.PlainDate.compare како компараторска функција датуми.сорт (Времен.ПлаинДатум.споредување);

Конверзии на временска зона Основната библиотека Moment не поддржува конверзии на временска зона. Ако ви треба оваа функционалност, треба да го инсталирате и пакетот момент-временска зона. Овој пакет не може да се разниша со дрво и затоа може значително да ја зголеми големината на вашиот пакет. Откако ќе ја инсталирате момент-временската зона, можете да ги конвертирате објектите на Moment во различни временски зони со методот tz. Како и со другите операции Момент, ова мутира на основнатаобјект. // Претпоставувајќи американско источно време const now = 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.2.2026, 8:12:02 PM EST

// Претворете во време на Пацификот const nowPacific = now.withTimeZone('America/Los_Angeles'); console.log(nowPacific.toLocaleString()); // 28.2.2026, 17:12:02 PST

// Оригиналниот објект останува непроменет console.log(now.toLocaleString()); // 28.2.2026, 8:12:02 PM EST

Забелешка: Форматираните вредности вратени од toLocaleString, како што имплицира името, зависат од локацијата. Кодот на примерокот е развиен во локалитетот en-US, така што форматот е вака: 28.2.2026, 17:12:02 PST. Во друга локација, ова може да биде различно. На пример, во локалитетот en-GB, ќе добиете нешто како 28/2/2026, 17:12:02 GMT-8. Рефакторирање во реалниот свет Да претпоставиме дека градиме апликација за закажување настани низ временските зони. Дел од оваа апликација е функцијата, getEventTimes, која зема низа ISO 8601 што ги претставува времето и датумот на настанот, локалната временска зона и целната временска зона. Функцијата создава форматирани низи за време и датум за настанот во двете временски зони. Ако на функцијата и се даде влезна низа што не е валидна низа за време/датум, таа ќе направи грешка. Еве ја оригиналната имплементација, користејќи Moment (исто така бара употреба на пакетот момент-временска зона).

увозен момент од „момент-временска зона“;

функција getEventTimes (inputString, userTimeZone, targetTimeZone) { const timeFormat = 'MMM D, YYYY, h:mm:ss a z';

// 1. Направете го почетниот момент во временската зона на корисникот const eventTime = moment.tz( влезна низа, moment.ISO_8601, // Очекувајте низа ISO 8601 точно, // Строго парсирање userTimeZone );

// Исфрли грешка ако влезната низа не претставува важечки датум if (!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 (schedule.local); // 5 март 2026 година, 15:00:00 часот EST

console.log (schedule.target); // 5 март 2026 година, 20:00 часот по Гринич

Во овој пример, ние користиме очекуван формат на датум на ISO 8601, кој е корисно вграден во Moment. Исто така, користиме строго парсирање, што значи дека Moment нема да се обиде да погоди со низа за датум што не одговара на форматот. Ако се помине низа за датум што не е ISO, тоа ќе резултира со неважечки објект за датум и ќе фрлиме грешка. Временската имплементација изгледа слично, но има неколку клучни разлики.

функција getEventTimes (inputString, userTimeZone, targetTimeZone) { // 1. Анализирајте го влезот директно во Инстант, а потоа креирајте // ZonedDateTime во зоната на корисникот. const instant = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);

// 2. Претворете во целната зона // Ова автоматски враќа НОВ објект; „Време на настан“ е безбедно. const targetTime = eventTime.withTimeZone(targetTimeZone);

// 3. Форматирајте користејќи Intl (вграден) Const опции = { година: „нумерички“, месец: „краток“, ден: „нумерички“, час: „нумерички“, минута: „2-цифрена“, второ: „2-цифрена“, timeZoneName: „кратко“ };

врати { локално: eventTime.toLocaleString(navigator.language, опции), цел: targetTime.toLocaleString(navigator.language, опции) }; }

распоред на време = getEventTimes ( „2026-03-05T15:00-05:00“, „Америка/Њујорк“, „Европа/Лондон“, );

console.log (schedule.local); // 5 март 2026, 15:00:00 EST

console.log (schedule.target); // 5 март 2026 година, 20:00 часот по Гринич

Со Moment, треба експлицитно да наведеме низа за формат за добиените низи за датуми. Без оглед на локацијата или локацијата на корисникот, времињата на настани секогаш ќе бидат форматирани како 5 март 2026 година, 3:00:00 часотpm EST. Исто така, не мораме експлицитно да фрламе исклучок. Ако неважечка низа се предаде на Temporal.Instant.from, Temporal ќе го фрли исклучокот за нас. Едно нешто што треба да се забележи е дека дури и со строго парсирање, верзијата Moment е сè уште поблага. Временската бара поместување на временската зона на крајот од низата. Исто така, треба да забележите дека бидејќи користиме navigator.language, овој код ќе работи само во околина на прелистувач, бидејќи навигаторот не е дефиниран во околината Node.js. Временската имплементација ја користи тековната локација на прелистувачот (navigator.language), така што корисникот автоматски ќе ги добие времињата на настани форматирани во нивниот формат за локално време. Во локалитетот на САД, ова е 5 март 2026 година, 15:00:00 часот EST. Меѓутоа, ако корисникот е во Лондон, на пример, времето на настанот ќе биде форматирано како 5 март 2026 година, 15:00:00 GMT-5. Резиме

Акција Момент.js Временски Тековно време момент () Temporal.Now.zonedDateTimeISO() Парсирање на ISO момент (ул) Temporal.Instant.from(str) Додадете време .add(7, 'денови') (мутира) .add({ дена: 7 }) (нов објект) Разлика .diff (друго, „часови“) .од(друго).часови Временска зона .tz („Зона/Име“) .withTimeZone („Зона/Име“)

На прв поглед, разликата може да биде малку поинаква (а во случајот со Временската, понекогаш пообемна и построга) синтакса, но има неколку клучни предности за користење на Temporal во однос на Moment.js:

Да се биде поексплицитен значи помалку изненадувања и ненамерни грешки. Моментот може да изгледа како поблаг, но вклучува „погодување“, што понекогаш може да резултира со неточни датуми. Ако му дадете на Temporal нешто невалидно, фрла грешка. Ако кодот работи, знаете дека имате важечки датум. Moment може да додаде значителна големина на пакетот на апликацијата, особено ако го користите пакетот момент-временска зона. Temporal не додава ништо (откако ќе се испрати во вашите целни прелистувачи). Непроменливоста ви дава доверба дека никогаш нема да ги изгубите или презапишете податоците кога вршите конверзии и операции на датуми. Различни претстави на времето (Instant, PlainDateTime, ZonedDateTime) во зависност од вашите барања, каде што Moment е секогаш обвивка околу временскиот печат UTC. Temporal ги користи Intl API-ите за форматирање на датуми, што значи дека можете да имате форматирање засновано на локалитет без да треба експлицитно да специфицирате токени.

Забелешки за полифилот Како што беше споменато претходно, достапен е Temporal polyfill, дистрибуиран како npm пакет со име @js-temporal/polyfill. Ако сакате да го користите Temporal денес, ќе ви треба овој полифил за поддршка на прелистувачи како Safari кои сè уште не го испорачале API. Лошата вест со ова е дека ќе ја зголеми големината на вашиот пакет. Добрата вест е што сепак додава значително помалку од моментот или момент-временската зона. Еве споредба на големините на пакетите како што е пријавено од Bundlephobia.com, веб-локација која прикажува информации за големини на пакети npm (кликнете на името на секој пакет за да ја видите анализата на Bundlephobia):

Пакет Минификуван Минификуван и gzipped @js-temporal/polyfill 154,1 kB 44,1 kB момент 294,4 kB 75,4 kB момент-временска зона 1 MB 114,2 kB

Полифилот, исто така, историски имал некои проблеми со перформансите околу употребата на меморијата, а во моментот на пишување, се смета дека е во алфа состојба. Поради ова, можеби нема да сакате да го користите во производството додека не достигне позрела состојба. Другата добра вест е дека се надеваме дека полифилот нема да биде потребен многу подолго (освен ако не треба да поддржувате постари прелистувачи, се разбира). Во моментот на пишување, Temporal беше испорачан во Chrome, Edge и Firefox. Сè уште не е сосема подготвен во Safari, иако се чини дека е достапен со знаменце за време на траење на најновиот преглед на технологијата.

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