Gotovo sve vrste aplikacija napisanih u JavaScriptu rade s vremenima ili datumima u nekom svojstvu. U početku je to bilo ograničeno na ugrađeni Date API. Ovaj API uključuje osnovne funkcije, ali je prilično ograničen u onome što može učiniti. Knjižnice trećih strana kao što je Moment.js, i kasnije ugrađeni API-ji kao što su Intl API-ji i novi Temporal API, dodaju mnogo veću fleksibilnost u radu s vremenima i datumima. Uspon i pad trenutka.js Moment.js je JavaScript biblioteka sa snažnim uslužnim programima za rad s vremenima i datumima. Uključuje značajke koje nedostaju iz osnovnog API-ja za datume, kao što je manipulacija vremenskom zonom, i čini mnoge uobičajene operacije jednostavnijima. Moment također uključuje funkcije za formatiranje datuma i vremena. Postala je široko korištena biblioteka u mnogim različitim aplikacijama. Međutim, Moment je također imao problema. To je velika biblioteka i može značajno povećati veličinu paketa aplikacije. Budući da biblioteka ne podržava potresanje stabla (značajka modernih paketa koji mogu ukloniti neiskorištene dijelove biblioteka), cijela biblioteka Moment je uključena čak i ako koristite samo jednu ili dvije njezine funkcije. Drugi problem s Momentom je činjenica da su objekti koje stvara promjenjivi. Pozivanje određenih funkcija na objektu Moment ima nuspojave i mijenja vrijednost tog objekta. To može dovesti do neočekivanog ponašanja ili grešaka. Godine 2020. održavatelji Momenta odlučili su knjižnicu staviti u način održavanja. Ne razvijaju se nove značajke i održavatelji preporučuju da se ne koristi za nove projekte. Postoje i druge JavaScript biblioteke datuma, kao što je date-fns, ali tu je i novi igrač u gradu, API ugrađen izravno u JavaScript: Temporal. To je novi standard koji popunjava rupe izvornog Date API-ja, kao i rješava neka od ograničenja koja se nalaze u Momentu i drugim bibliotekama. Što je temporalno? Temporal je novi API za vrijeme i datum koji se dodaje standardu ECMAScript, koji definira moderni JavaScript. Od ožujka 20266. dosegao je fazu 4 procesa TC39 (odbor koji nadzire prijedloge i dodatke jeziku JavaScript), te će biti uključen u sljedeću verziju specifikacije ECMAScript. Već je implementiran u nekoliko preglednika: Chrome 144+ i Firefox 139+, a očekuje se da će Safari uskoro uslijediti. Polifill je također dostupan za nepodržane preglednike i Node.js. Temporal API stvara objekte koji općenito predstavljaju trenutke u vremenu. To mogu biti oznake punog radnog vremena i datuma u određenoj vremenskoj zoni ili mogu biti generička instanca vremena "zidnog sata" bez ikakvih informacija o vremenskoj zoni ili datumu. Neke od glavnih značajki Temporala uključuju:

Vremena sa ili bez datuma. Vremenski objekt može predstavljati određeno vrijeme na određeni datum ili vrijeme bez ikakvih informacija o datumu. Može se prikazati i određeni datum, bez vremena. Podrška za vremensku zonu. Vremenski objekti u potpunosti su svjesni vremenske zone i mogu se pretvoriti u različite vremenske zone. Moment podržava i vremenske zone, ali zahtijeva dodatnu biblioteku trenutak-vremenska zona. Nepromjenjivost. Jednom kada je Temporalni objekt kreiran, ne može se mijenjati. Vremenska aritmetika ili pretvorbe vremenskih zona ne mijenjaju temeljni objekt. Umjesto toga, generiraju novi temporalni objekt. Indeksiranje temeljeno na 1. Uobičajeni izvor pogrešaka s Date API-jem (kao i s Momentom) jest da su mjeseci indeksirani nulom. To znači da je siječanj mjesec 0, a ne mjesec 1 kako svi razumijemo u stvarnom životu. Temporal to popravlja korištenjem indeksiranja temeljenog na 1 — siječanj je 1. mjesec. Ugrađen je u preglednik. Budući da je Temporal API u samom pregledniku, ne dodaje ništa veličini paketa vaše aplikacije.

Također je važno napomenuti da Date API neće nestati. Iako Temporal zamjenjuje ovaj API, on se ne uklanja niti obustavlja. Mnoge aplikacije bi se pokvarile kada bi preglednici iznenada uklonili Date API. Međutim, također imajte na umu da se Moment sada smatra naslijeđenim projektom u načinu održavanja. U ostatku članka pogledat ćemo neke "recepte" za migraciju koda temeljenog na Momentu na novi Temporal API. Počnimo refaktorirati! Stvaranje objekata datuma i vremena Prije nego što možemo manipulirati datumima i vremenima, moramo stvoriti objekte koji ih predstavljaju. Za izradu objekta Moment koji predstavlja trenutni datum i vrijeme upotrijebite funkciju trenutka. const sada = moment(); console.log(sada); // Trenutak<2026-02-18T21:26:29-05:00>

Ovaj se objekt sada može formatirati ili manipulirati prema potrebi.

// pretvoriti u UTC //upozorenje: ovo mutira objekt Moment i stavlja ga u UTC mod! console.log(now.utc()); // Trenutak<2026-02-19T02:26:29Z>

// ispis formatiranog niza - imajte na umu da sada koristi UTC vrijeme console.log(now.format('MM/DD/GGGG hh:mm:ss a')); // 19.02.2026 02:27:07 ujutro

Ključna stvar koju treba zapamtiti o Momentu je da objekt Moment uvijek uključuje informacije o vremenu i datumu. Ako trebate raditi samo s informacijama o vremenu, to je obično u redu, ali može uzrokovati neočekivano ponašanje u situacijama kao što je ljetno računanje vremena ili prijestupne godine, gdje datum može utjecati na izračun vremena. Vremenski je fleksibilniji. Možete stvoriti objekt koji predstavlja trenutni datum i vrijeme stvaranjem objekta Temporal.Instant. Ovo predstavlja točku u vremenu definiranu vremenom od "epohe" (ponoć UTC 1. siječnja 1970.). Temporal može referencirati ovaj trenutak u vremenu s preciznošću na razini nanosekunde. const sada = Temporal.Now.instant();

// vidjeti sirove nanosekunde od epohe console.log(now.epochNanoseconds); // 1771466342612000000n

// format za UTC console.log(now.toString()); // 2026-02-19T01:55:27.844Z

// format za određenu vremensku zonu console.log(now.toString({ timeZone: 'America/New_York' })); // 2026-02-18T20:56:57.905-05:00

Objekti Temporal.Instant također se mogu stvoriti za određeno vrijeme i datum korištenjem metode from static.

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

// Formatirajte trenutak u lokalnoj vremenskoj zoni. Imajte na umu da ovo samo kontrolira // oblikovanje - ne mijenja objekt kao što to čini moment.utc. console.log(myInstant.toString({ timeZone: 'America/New_York' })); // 2026-02-18T21:10:00-05:00

Također možete stvoriti druge vrste vremenskih objekata, uključujući:

Temporal.PlainDate: datum bez informacija o vremenu. Temporal.PlainTime: vrijeme bez podataka o datumu. Temporal.ZonedDateTime: datum i vrijeme u određenoj vremenskoj zoni.

Svaki od njih ima metodu from koja se može pozvati s objektom koji specificira datum i/ili vrijeme ili niz datuma za analizu. // Samo spoj const danas = Temporal.PlainDate.from({ godina: 2026, mjesec: 2, // imajte na umu da koristimo 2 za veljaču dan: 18 }); console.log(today.toString()); // 2026-02-18

// Samo vrijeme const lunchTime = Temporal.PlainTime.from({ sat: 12 }); console.log(lunchTime.toString()); // 12:00:00

// Datum i vrijeme u istočnoj vremenskoj zoni SAD-a const dueAt = Temporal.ZonedDateTime.from({ vremenska zona: 'Amerika/New_York', godina: 2026, mjesec: 3, dan: 1, sat: 12, minuta: 0, drugi: 0 }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[Amerika/New_York]

Raščlanjivanje Pokrili smo programsko stvaranje informacija o datumu i vremenu. Sada pogledajmo raščlanjivanje. Raščlanjivanje je jedno područje u kojem je Moment fleksibilniji od ugrađenog Temporal API-ja. Niz datuma možete analizirati tako da ga proslijedite funkciji trenutka. Uz jedan argument, Moment očekuje niz ISO datuma, ali možete koristiti alternativne formate ako navedete drugi argument koji navodi format datuma koji se koristi.

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); // Trenutak<2026-02-21T09:00:00-05:00>

console.log(formattedDate); // Trenutak<2026-02-21T09:00:00-05:00>

U starijim verzijama, Moment bi najbolje pogodio za raščlanjivanje bilo kojeg proizvoljno oblikovanog niza datuma. To bi moglo dovesti do nepredvidivih rezultata. Na primjer, je li 02-03-2026 2. veljače ili 3. ožujka? Iz tog razloga, novije verzije Momenta prikazuju istaknuto upozorenje o zastarjevanju ako se pozivaju bez ISO formatiranog niza datuma (osim ako nije dan i drugi argument sa željenim formatom). Temporal će analizirati samo posebno formatirani niz datuma. Niz mora biti u skladu s formatom ISO 8601 ili njegovim proširenjem, RFC 9557. Ako se neusklađeni niz datuma proslijedi metodi from, Temporal će izbaciti RangeError.

// Korištenje niza datuma RFC 9557 const myDate = Temporal.Instant.from('2026-02-21T09:00:00-05:00[America/New_York]'); console.log(myDate.toString({ timeZone: 'America/New_York' })); // 2026-02-21T09:00:00-05:00

// Korištenje nepoznatog niza datuma const otherDate = Temporal.Instant.from('2/21/26 9:00:00'); // RangeError: Vremenska pogreška: Nevažeći znak tijekom analize vrijednosti godine.

Točni zahtjevi niza datuma ovise o vrsti Temporalnog objekta koji stvarate. U gornjem primjeru, Temporal.Instant zahtijeva puni ISO8601 ili RFC 9557 niz datuma koji navodi datum i vrijeme s pomakom vremenske zone, ali također možete stvoriti objekte PlainDate ili PlainTime koristeći samo podskup formata datuma. 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

Imajte na umu da ovi nizovi i dalje moraju biti u skladu s očekivanim formatom ili će se pojaviti pogreška.

// Korištenje vremenskih nizova koji nisu usklađeni. Sve će to izbaciti RangeError. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00 AM');

Stručni savjet: rukovanje nizovima koji nisu ISO Budući da Temporal daje prednost pouzdanosti, neće pokušati pogoditi format niza kao što je 02-01-2026. Ako vaš izvor podataka koristi takve nizove, morat ćete malo manipulirati nizom da preuredite vrijednosti u ISO niz kao što je 2026-02-01 prije nego što ga pokušate koristiti s Temporal.

Oblikovanje Nakon što imate objekt Moment ili Temporal, vjerojatno ćete ga u nekom trenutku htjeti pretvoriti u formatirani niz. Ovo je primjer u kojem je Moment malo sažetiji. Pozivate metodu formata objekta s nizom tokena koji opisuju željeni format datuma. const datum = moment();

console.log(date.format('MM/DD/GGGG')); // 22.02.2026

console.log(date.format('MMMM do GGGG, h:mm:ss a')); // 22. veljače 2026., 20:18:30

S druge strane, Temporal zahtijeva da budete malo opširniji. Vremenski objekti, kao što je Instant, imaju metodu toLocaleString koja prihvaća različite opcije oblikovanja navedene kao svojstva objekta.

const datum = Temporal.Now.instant();

// bez argumenata, dobit ćemo zadani format za trenutnu lokalizaciju console.log(date.toLocaleString()); // 2/22/2026, 20:23:36 (pod pretpostavkom da je lokalitet en-US)

// proslijedite opcije oblikovanja za generiranje prilagođenog niza formata console.log(date.toLocaleString('en-US', { mjesec: 'dugo', dan: 'brojčani', godina: 'numeric', sat: '2-znamenkasti', minuta: '2-znamenkasti' })); // 22. veljače 2026. u 20:23

// proslijedite samo polja koja želite u nizu formata console.log(date.toLocaleString('en-US', { mjesec: 'kratak', dan: 'brojčani' })); // 22. veljače

Vremensko oblikovanje datuma zapravo koristi Intl.DateTimeFormat API (koji je već dostupan u modernim preglednicima) ispod haube. To znači da možete stvoriti objekt DateTimeFormat za višekratnu upotrebu sa svojim prilagođenim opcijama oblikovanja, a zatim proslijediti Temporal objekte njegovoj metodi oblikovanja. Zbog toga ne podržava prilagođene formate datuma kao što to čini Moment. Ako trebate nešto poput 'Q1 2026' ili drugo specijalizirano oblikovanje, možda će vam trebati prilagođeni kod za oblikovanje datuma ili posegnuti za bibliotekom treće strane. const formatter = new Intl.DateTimeFormat('en-US', { mjesec: '2-znamenkasti', dan: '2-znamenkasti', godina: 'numeric' });

const datum = Temporal.Now.instant(); console.log(formatter.format(datum)); // 22.02.2026

Momentove tokene za oblikovanje jednostavnije je pisati, ali nisu prilagođeni lokalnoj razini. Format sadrži "tvrdi kod" stvari poput redoslijeda mjesec/dan. Prednost korištenja konfiguracijskog objekta, kao što to čini Temporal, je ta što će se automatski prilagoditi bilo kojoj lokalnoj postavci i koristiti ispravan format. const datum = Temporal.Now.instant();

const formatOptions = { mjesec: 'brojčani', dan: 'brojčani', godina: 'numeric' };

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

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

Izračuni datuma U mnogim aplikacijama morat ćete na kraju izvršiti neke izračune na datumu. Možda želite dodati ili oduzeti jedinice vremena (dane, sate, sekunde itd.). Na primjer, ako imate trenutni datum, možda biste željeli korisniku prikazati datum za 1 tjedan od sada. Objekti trenutka imaju metode kao što su zbrajanje i oduzimanje koje izvode te operacije. Ove funkcije uzimaju vrijednost i jedinicu, na primjer: add(7, 'days'). Međutim, jedna vrlo važna razlika između Momenta i Temporal-a je ta da se prilikom izvođenja ovih izračuna datuma temeljni objekt modificira i njegova izvorna vrijednost se gubi. const sada = moment();

console.log(sada); // Trenutak<2026-02-24T20:08:36-05:00>

const nextWeek = now.add(7, 'days'); console.log(sljedećiTjedan); // Trenutak<2026-03-03T20:08:36-05:00>

// Kužim - originalni objekt je mutiran console.log(sada); // Trenutak<2026-03-03T20:08:36-05:00>

Da biste izbjegli gubitak izvornog datuma, možete pozvati klon na objektu Moment da biste stvorili kopiju. konst sada= trenutak(); const nextWeek = now.clone().add(7, 'days');

console.log(sada); // Trenutak<2026-02-24T20:12:55-05:00>

console.log(sljedećiTjedan); // Trenutak<2026-03-03T20:12:55-05:00>

S druge strane, vremenski objekti su nepromjenjivi. Nakon što stvorite objekt kao što je Instant, PlainDate i tako dalje, vrijednost tog objekta nikada se neće promijeniti. Vremenski objekti također imaju metode zbrajanja i oduzimanja. Temporal je malo izbirljiv oko toga koje se vremenske jedinice mogu dodati kojim vrstama objekata. Na primjer, ne možete dodati dane u Instant:

const sada = Temporal.Now.instant(); const nextWeek = now.add({ days: 7 }); // RangeError: Vremenska pogreška: Najveća jedinica ne može biti jedinica datuma

To je zato što Instant objekti predstavljaju određenu točku u vremenu u UTC-u i kalendarski su agnostički. Budući da se duljina dana može promijeniti na temelju pravila vremenske zone kao što je ljetno računanje vremena, ovaj izračun nije dostupan na Instantu. Međutim, ovu operaciju možete izvesti na drugim vrstama objekata, kao što je PlainDateTime: const sada = Temporal.Now.plainDateTimeISO(); console.log(now.toLocaleString()); // 24.2.2026., 20:23:59

const nextWeek = now.add({ days: 7 });

// Imajte na umu da izvorni PlainDateTime ostaje nepromijenjen console.log(now.toLocaleString()); // 24.2.2026., 20:23:59

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

Također možete izračunati koliko je vremena između dva objekta Moment ili Temporal. S Momentovom diff funkcijom trebate navesti jedinicu za granularnost, inače će vratiti razliku u milisekundama. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');

console.log(datum2.diff(datum1)); // 91800000

console.log(datum2.diff(datum1, 'dani')); // 1

Da biste to učinili s temporalnim objektom, možete proslijediti drugi temporalni objekt njegovim metodama do ili od. Ovo vraća objekt Temporal.Duration koji sadrži informacije o vremenskoj razlici. Objekt Duration ima svojstva za svaku komponentu razlike, a također može generirati ISO 8601 niz trajanja koji predstavlja vremensku razliku.

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

// largeUnit specificira najveću jedinicu vremena za predstavljanje // u izračunu trajanja const diff = date2.since(date1, { largeUnit: 'dan' });

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

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

console.log(diff.minutes); // 30

console.log(diff.toString()); // P1DT1H30M // (ISO 8601 niz trajanja: 1 dan, 1 sat, 30 minuta)

Usporedba datuma i vremena I Moment i Temporal omogućuju vam usporedbu datuma i vremena kako biste odredili koji je ispred drugoga, ali koristite različite pristupe s API-jem. Moment pruža metode kao što su isBefore, isAfter i isSame za usporedbu dva objekta Moment. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');

console.log(datum1.isBefore(datum2)); // istina

Temporal koristi metodu statičke usporedbe za izvođenje usporedbe između dva objekta iste vrste. Vraća -1 ako prvi datum dolazi prije drugog, 0 ako su jednaki ili 1 ako prvi datum dolazi nakon drugog. Sljedeći primjer pokazuje kako usporediti dva PlainDate objekta. Oba argumenta za Temporal.PlainDate.compare moraju biti PlainDate objekti.

const date1 = Temporal.PlainDate.from({ godina: 2026, mjesec: 2, dan: 24 }); const date2 = Temporal.PlainDate.from({ godina: 2026, mjesec: 3, dan: 24 });

// datum1 dolazi prije datuma2, dakle -1 console.log(Temporal.PlainDate.compare(datum1, date2));

// Pogreška ako pokušamo usporediti dva objekta različitih vrsta console.log(Temporal.PlainDate.compare(date1, Temporal.Now.instant())); // TypeError: Vremenska pogreška: Navedena su nevažeća polja PlainDate.

Konkretno, ovo olakšava kronološko sortiranje niza vremenskih objekata. // Niz objekata Temporal.PlainDate const datumi = [ ... ];

// koristi Temporal.PlainDate.compare kao funkciju usporedbe dates.sort(Temporal.PlainDate.compare);

Pretvorbe vremenskih zona Osnovna biblioteka Moment ne podržava konverzije vremenskih zona. Ako vam je potrebna ova funkcionalnost, morate također instalirati paket moment-timezone. Ovaj paket nije potresan i stoga može značajno povećati veličinu paketa. Nakon što ste instalirali moment-timezone, možete pretvoriti Moment objekte u različite vremenske zone metodom tz. Kao i kod drugih Moment operacija, ovo mutira podloguobjekt. // Uz pretpostavku američkog istočnog vremena const sada = moment(); console.log(sada); // Trenutak<2026-02-28T20:08:20-05:00>

// Pretvori u pacifičko vrijeme. // Izvorno istočno vrijeme je izgubljeno. now.tz('Amerika/Los_Angeles'); console.log(sada); // Trenutak<2026-02-28T17:08:20-08:00>

Funkcionalnost vremenske zone ugrađena je u Temporal API kada se koristi objekt Temporal.ZonedDateTime. Ovi objekti uključuju metodu withTimeZone koja vraća novi ZonedDateTime koji predstavlja isti trenutak u vremenu, ali u navedenoj vremenskoj zoni. // Opet, uz pretpostavku američkog istočnog vremena const now = Temporal.Now.zonedDateTimeISO(); console.log(now.toLocaleString()); // 28.2.2026., 20:12:02 EST

// Pretvori u pacifičko vrijeme const nowPacific = now.withTimeZone('Amerika/Los_Angeles'); console.log(nowPacific.toLocaleString()); // 28. 2. 2026., 17:12:02 PST

// Izvorni objekt ostaje nepromijenjen console.log(now.toLocaleString()); // 28.2.2026., 20:12:02 EST

Napomena: Formatirane vrijednosti koje vraća toLocaleString su, kao što naziv implicira, ovisne o lokalizaciji. Uzorak koda razvijen je u en-US lokalitetu, pa je format ovakav: 2/28/2026, 17:12:02 PST. Na drugom mjestu to može biti drugačije. Na primjer, u en-GB lokalitetu, dobili biste nešto poput 28/2/2026, 17:12:02 GMT-8. Refactoring u stvarnom svijetu Pretpostavimo da gradimo aplikaciju za zakazivanje događaja u različitim vremenskim zonama. Dio ove aplikacije je funkcija, getEventTimes, koja uzima niz ISO 8601 koji predstavlja vrijeme i datum događaja, lokalnu vremensku zonu i ciljanu vremensku zonu. Funkcija stvara formatirane nizove vremena i datuma za događaj u obje vremenske zone. Ako funkcija dobije ulazni niz koji nije važeći niz vremena/datuma, izbacit će pogrešku. Ovo je izvorna implementacija koja koristi Moment (također zahtijeva upotrebu paketa moment-timezone).

uvoz trenutka iz 'vremenske zone trenutka';

funkcija getEventTimes(inputString, userTimeZone, targetTimeZone) { const timeFormat = 'D MMM, GGGG, h:mm:ss a z';

// 1. Kreirajte početni trenutak u vremenskoj zoni korisnika const eventTime = moment.tz( inputString, moment.ISO_8601, // Očekujte ISO 8601 niz istina, // Stroga analiza korisničkaVremenskaZona );

// Izbacuje pogrešku ako inputString ne predstavlja važeći datum if (!eventTime.isValid()) { throw new Error('Invalid date/time input'); }

// 2. Izračunajte ciljno vrijeme // KRITIČNO: Moramo klonirati ili se 'eventTime' mijenja zauvijek! const targetTime = eventTime.clone().tz(targetTimeZone);

povratak { lokalno: eventTime.format(timeFormat), cilj: targetTime.format(timeFormat), }; }

const raspored = getEventTimes( '2026-03-05T15:00-05:00', 'Amerika/New_York', 'Europa/London', );

console.log(schedule.local); // 5. ožujka 2026., 15:00:00 EST

console.log(schedule.target); // 5. ožujka 2026., 20:00:00 GMT

U ovom primjeru koristimo očekivani format datuma ISO 8601, koji je korisno ugrađen u Moment. Također koristimo striktno raščlanjivanje, što znači da Moment neće pokušati pogoditi s nizom datuma koji ne odgovara formatu. Ako se proslijedi niz datuma koji nije ISO, to će rezultirati nevažećim objektom datuma, a mi ćemo izbaciti pogrešku. Vremenska implementacija izgleda slično, ali ima nekoliko ključnih razlika.

funkcija getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. Raščlanite unos izravno u Instant, zatim kreirajte // ZonedDateTime u zoni korisnika. const instant = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);

// 2. Pretvori u ciljnu zonu // Ovo automatski vraća NOVI objekt; 'eventTime' je siguran. const targetTime = eventTime.withTimeZone(targetTimeZone);

// 3. Formatirajte pomoću Intl (ugrađeno) opcije const = { godina: 'numeric', mjesec: 'kratak', dan: 'brojčani', sat: 'numeric', minuta: '2-znamenkasti', drugi: '2-znamenkasti', timeZoneName: 'kratko' };

povratak { lokalno: eventTime.toLocaleString(navigator.language, opcije), target: targetTime.toLocaleString(navigator.language, options) }; }

const raspored = getEventTimes( '2026-03-05T15:00-05:00', 'Amerika/New_York', 'Europa/London', );

console.log(schedule.local); // 5. ožujka 2026., 15:00:00 EST

console.log(schedule.target); // 5. ožujka 2026., 20:00:00 GMT

S Momentom, moramo eksplicitno navesti niz formata za rezultirajuće nizove datuma. Bez obzira na lokaciju ili lokalitet korisnika, vremena događaja uvijek će biti oblikovana kao 5. ožujka 2026., 3:00:00popodne EST. Također, ne moramo izričito izbaciti iznimku. Ako se u Temporal.Instant.from proslijedi nevažeći niz, Temporal će izbaciti iznimku umjesto nas. Jedna stvar koju treba primijetiti je da je čak i sa strogim analiziranjem verzija Momenta ipak blaža. Temporal zahtijeva pomak vremenske zone na kraju niza. Također biste trebali imati na umu da, budući da koristimo navigator.language, ovaj kod će se izvoditi samo u okruženju preglednika, jer navigator nije definiran u okruženju Node.js. Vremenska implementacija koristi trenutnu lokalizaciju preglednika (navigator.language), tako da će korisnik automatski dobiti vremena događaja oblikovana u svom formatu lokalnog vremena. Na lokalnom jeziku en-US, ovo je 5. ožujka 2026., 15:00:00 EST. Međutim, ako je korisnik u Londonu, na primjer, vremena događaja bit će oblikovana kao 5. ožujka 2026., 15:00:00 GMT-5. Sažetak

Akcija Moment.js Vremenski Trenutno vrijeme trenutak() Temporal.Now.zonedDateTimeISO() Raščlanjivanje ISO trenutak (str) Temporal.Instant.from(str) Dodajte vrijeme .add(7, 'dani') (mutira) .add({ dana: 7 }) (novi objekt) razlika .diff(ostalo, 'sati') .od (ostalo).sati Vremenska zona .tz('Zona/Naziv') .withTimeZone('Zona/Naziv')

Na prvi pogled, razlika može biti malo drugačija (au slučaju Temporal-a, ponekad opširnija i stroža) sintaksa, ali postoji nekoliko ključnih prednosti korištenja Temporal-a u odnosu na Moment.js:

Biti eksplicitniji znači manje iznenađenja i nenamjernih grešaka. Moment se može činiti blažim, ali uključuje "nagađanje", što ponekad može rezultirati netočnim datumima. Ako Temporalu date nešto nevažeće, javlja se pogreška. Ako se kôd pokrene, znate da imate važeći datum. Moment može dodati značajnu veličinu paketu aplikacije, osobito ako koristite paket moment-timezone. Temporal ne dodaje ništa (nakon što se pošalje u vaše ciljane preglednike). Nepromjenjivost vam daje povjerenje da nikada nećete izgubiti ili prebrisati podatke prilikom izvođenja konverzija datuma i operacija. Različiti prikazi vremena (Instant, PlainDateTime, ZonedDateTime) ovisno o vašim zahtjevima, gdje je Moment uvijek omotač oko UTC vremenske oznake. Temporal koristi Intl API-je za formatiranje datuma, što znači da možete imati formatiranje s obzirom na lokalizaciju bez potrebe za eksplicitnim navođenjem tokena.

Bilješke o Polyfillu Kao što je ranije spomenuto, dostupan je Temporal polyfill, distribuiran kao npm paket pod nazivom @js-temporal/polyfill. Ako danas želite koristiti Temporal, trebat će vam ovaj polyfill za podršku preglednicima poput Safarija koji još nisu isporučili API. Loša vijest s ovim je da će povećati vašu veličinu paketa. Dobra vijest je da još uvijek dodaje znatno manje od trenutka ili vremenske zone trenutka. Ovdje je usporedba veličina paketa prema izvješću Bundlephobia.com, web stranice koja predstavlja informacije o veličinama npm paketa (kliknite na naziv svakog paketa da vidite Bundlephobia analizu):

Paket Smanjeno Smanjeno i gzipano @js-temporal/polyfill 154,1 kB 44,1 kB trenutak 294,4 kB 75,4 kB trenutak-vremenska zona 1 MB 114,2 kB

Polyfill je također povijesno imao problema s izvedbom u vezi s upotrebom memorije, a u vrijeme pisanja smatralo se da je u alfa stanju. Zbog toga ga možda nećete htjeti koristiti u proizvodnji dok ne dosegne zrelije stanje. Druga dobra vijest je da se nadamo da polyfill neće još dugo biti potreban (osim ako ne trebate podržavati starije preglednike, naravno). U vrijeme pisanja, Temporal je isporučen u Chromeu, Edgeu i Firefoxu. Još nije sasvim spreman u Safariju, iako se čini da je dostupan s oznakom vremena izvođenja na najnovijem tehnološkom pregledu.

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