Prèske nenpòt kalite aplikasyon ki ekri nan JavaScript travay ak lè oswa dat nan kèk kapasite. Nan kòmansman an, sa a te limite a bati-an API Dat la. API sa a gen ladann fonksyonalite debaz, men li byen limite nan sa li kapab fè. Bibliyotèk twazyèm pati tankou Moment.js, epi pita API entegre tankou API Intl ak nouvo API Temporal, ajoute pi gwo fleksibilite nan travay ak lè ak dat. Leve ak Otòn Moman.js Moment.js se yon bibliyotèk JavaScript ak sèvis piblik pwisan pou travay ak lè ak dat. Li gen ladann karakteristik ki manke nan API debaz Dat la, tankou manipilasyon zòn tan, epi li fè anpil operasyon komen pi senp. Moman gen ladan tou fonksyon pou fòma dat ak lè. Li te vin tounen yon bibliyotèk lajman itilize nan anpil aplikasyon diferan. Sepandan, Moment tou te gen pati li yo nan pwoblèm. Li se yon bibliyotèk gwo, epi li ka ajoute anpil nan gwosè pake yon aplikasyon an. Paske bibliyotèk la pa sipòte pye bwa souke (yon karakteristik nan bundlers modèn ki ka retire pati ki pa itilize nan bibliyotèk), tout bibliyotèk Moment la enkli menm si ou sèlman itilize youn oswa de nan fonksyon li yo. Yon lòt pwoblèm ak Moment se lefèt ke objè yo li kreye yo mutab. Rele sèten fonksyon sou yon objè Moment gen efè segondè ak mitasyon valè objè sa a. Sa a ka mennen nan konpòtman inatandi oswa pinèz. Nan 2020, moun ki kenbe Moment yo te deside mete bibliyotèk la nan mòd antretyen. Pa gen okenn devlopman nouvo karakteristik yo te fè, epi mentenans yo rekòmande pou yo pa sèvi ak li pou nouvo pwojè. Gen lòt bibliyotèk dat JavaScript, tankou dat-fns, men gen yon nouvo jwè nan vil la, yon API ki bati dirèkteman nan JavaScript: Temporal. Li se yon nouvo estanda ki ranpli twou yo nan API Dat orijinal la epi tou rezoud kèk nan limit yo jwenn nan Moment ak lòt bibliyotèk. Ki sa ki se tanporèl? Temporal se yon nouvo API lè ak dat ke yo te ajoute nan estanda ECMAScript la, ki defini JavaScript modèn. Depi mas 20266, li te rive nan Etap 4 nan pwosesis TC39 la (komite ki sipèvize pwopozisyon ak adisyon nan lang JavaScript), epi li pral enkli nan pwochen vèsyon an nan spesifikasyon ECMAScript la. Li te deja aplike nan plizyè navigatè: Chrome 144+ ak Firefox 139+, ak Safari espere swiv byento. Yon polyfill disponib tou pou navigatè ki pa sipòte ak Node.js. API Temporal la kreye objè ki, jeneralman, reprezante moman nan tan. Sa yo ka aplentan ak koupon pou dat nan yon zòn tan bay, oswa yo kapab yon egzanp jenerik nan "revèy miray" tan san okenn enfòmasyon sou zòn lè oswa dat. Gen kèk nan karakteristik prensipal yo nan Temporal yo enkli:
Tan ki gen oswa san dat.Yon objè tanporèl ka reprezante yon tan espesifik nan yon dat espesifik, oswa yon lè san okenn enfòmasyon sou dat. Yon dat espesifik, san yon lè, kapab tou reprezante. Sipò pou zòn tan. Objè tanporèl yo konplètman konnen zòn tan epi yo ka konvèti atravè diferan zòn tan. Moment sipòte zòn tan, tou, men li mande bibliyotèk adisyonèl moman-zon lè. Imutabilite.Yon fwa yo kreye yon objè Tanporèl, li pa ka chanje. Aritmetik tan oswa konvèsyon zòn tan pa modifye objè ki kache a. Olye de sa, yo jenere yon nouvo objè Temporal. Indexing ki baze sou 1.Yon sous komen nan pinèz ak API Dat la (kòm byen ke ak Moment) se ke mwa yo zewo-indexed. Sa vle di ke janvye se mwa 0, olye ke mwa 1 jan nou tout konprann nan lavi reyèl. Tanporèl repare sa lè l sèvi avèk Indexing ki baze sou 1 - Janvye se mwa 1. Li entegre nan navigatè a. Piske Temporal se yon API nan navigatè a li menm, li pa ajoute anyen nan gwosè pake aplikasyon w lan.
Li enpòtan tou sonje ke API Dat la pa pral disparèt. Pandan ke Temporal ranplase API sa a, li pa retire oswa depreke. Anpil aplikasyon ta kase si navigatè toudenkou retire API Dat la. Sepandan, tou kenbe nan tèt ou ke Moment kounye a konsidere kòm yon pwojè eritaj nan mòd antretyen. Nan rès atik la, nou pral gade kèk "resèt" pou imigre kòd ki baze sou Moment nan nouvo API Temporal la. Ann kòmanse refactoring! Kreye dat ak lè objè Anvan nou ka manipile dat ak lè, nou dwe kreye objè ki reprezante yo. Pou kreye yon objè Moman ki reprezante dat ak lè aktyèl la, sèvi ak fonksyon moman an. const kounye a = moman (); console.log (kounye a); // Moman<2026-02-18T21:26:29-05:00>
Objè sa a kapab kounye a fòma oswa manipile jan sa nesesè.
// konvèti an UTC //avètisman: Sa a mitasyon objè Moment la epi li mete l nan mòd UTC! console.log (now.utc ()); // Moman<2026-02-19T02:26:29Z>
// enprime yon fisèl fòma - sonje ke li ap itilize lè UTC kounye a console.log(now.format('MM/JJ/AAAA hh:mm:ss a')); // 02/19/2026 02:27:07 am
Bagay la kle pou sonje sou Moman se ke yon objè Moment toujou gen ladann enfòmasyon sou lè a ak dat la. Si w sèlman bezwen travay ak enfòmasyon sou tan, sa a anjeneral bon, men li ka lakòz konpòtman inatandi nan sitiyasyon tankou Daylight Saving Time oswa ane kwasans, kote dat la ka gen yon efè sou kalkil tan. Tanporèl pi fleksib. Ou ka kreye yon objè ki reprezante dat ak lè aktyèl la lè w kreye yon objè Temporal.Instant. Sa a reprezante yon pwen nan tan ki defini pa tan an depi "epòk la" (minwi UTC sou 1ye janvye 1970). Tanporèl ka fè referans enstantane sa a nan tan ak presizyon nan nivo nanosecond. const kounye a = Temporal.Now.instant ();
// wè nanoseconds anvan tout koreksyon depi epòk la console.log(now.epochNanoseconds); // 1771466342612000000n
// fòma pou UTC console.log(now.toString()); // 2026-02-19T01:55:27.844Z
// fòma pou yon zòn lè patikilye console.log(now.toString({timeZone:'America/New_York'})); // 2026-02-18T20:56:57.905-05:00
Objè Temporal.Instant kapab tou kreye pou yon tan ak dat espesifik lè l sèvi avèk metòd soti nan estatik.
const myInstant = Temporal.Instant.from('2026-02-18T21:10:00-05:00');
// Fòma enstantane a nan zòn lè lokal la. Remake byen ke sa a sèlman kontwole // fòma a - li pa mitasyon objè a tankou moment.utc fè. console.log(myInstant.toString({timeZone: 'America/New_York'})); // 2026-02-18T21:10:00-05:00
Ou kapab tou kreye lòt kalite objè tanporèl, tankou:
Temporal.PlainDate: Yon dat ki pa gen enfòmasyon sou lè. Temporal.PlainTime: Yon lè ki pa gen enfòmasyon sou dat. Temporal.ZonedDateTime: Yon dat ak lè nan yon zòn tan espesifik.
Chak nan sa yo gen yon metòd soti nan ki ka rele ak yon objè ki espesifye dat ak / oswa lè, oswa yon kòd dat analize. // Jis yon dat const jodi a = Temporal.PlainDate.from({ ane: 2026, mwa: 2, // sonje nou ap itilize 2 pou fevriye jou: 18 }); console.log (jodi a.toString ()); // 2026-02-18
// Jis yon tan const lunchTime = Temporal.PlainTime.from({ lè: 12 }); console.log(lunchTime.toString()); // 12:00:00
// Yon dat ak lè nan zòn lès Etazini an const dueAt = Temporal.ZonedDateTime.from({ timeZone: 'America/New_York', ane: 2026, mwa: 3, jou: 1, lè: 12, minit: 0, dezyèm: 0 }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[Amerik/New_York]
Analiz Nou te kouvri pwogram kreyasyon enfòmasyon dat ak lè. Koulye a, ann gade nan analiz. Analyse se yon zòn kote Moment pi fleksib pase API Temporal entegre. Ou ka analize yon kòd dat lè w pase li nan fonksyon moman an. Avèk yon sèl agiman, Moment espere yon kòd dat ISO, men ou ka itilize fòma altènatif si ou bay yon dezyèm agiman ki espesifye fòma dat yo itilize a.
const isoDate = moman('2026-02-21T09:00:00'); const formattedDate = moman('2/21/26 9:00:00', 'M/D/YY h:mm:ss');
console.log(isoDate); // Moman<2026-02-21T09:00:00-05:00>
console.log(formattedDate); // Moman<2026-02-21T09:00:00-05:00>
Nan vèsyon ki pi gran yo, Moment ta fè yon pi bon devine pou analize nenpòt fisèl dat fòma abitrèman. Sa a ka mennen nan rezilta enprevizib. Pa egzanp, se 02-03-2026 2 fevriye oswa 3 mas? Pou rezon sa a, vèsyon ki pi nouvo nan Moment montre yon avètisman depresyon enpòtan si yo rele li san yon kòd dat fòma ISO (sòf si yo bay dezyèm agiman an ak fòma vle a). Tanporèl pral sèlman analize yon kòd dat ki gen fòma espesyalman. Chèn nan dwe konfòme ak fòma ISO 8601 oswa ekstansyon li, RFC 9557. Si yo pase yon kòd dat ki pa konfòme nan yon metòd soti, Temporal pral voye yon RangeError.
// Sèvi ak yon kòd dat 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
// Sèvi ak yon kòd dat enkoni const otherDate = Temporal.Instant.from('2/21/26 9:00:00'); // RangeError: Erè tanporèl: karaktè envalid pandan y ap analize valè ane a.
Kondisyon egzak nan fisèl dat la depann de ki kalite objè tanporèl w ap kreye. Nan egzanp ki anwo a, Temporal.Instant mande pou yon ISO konplè8601 oswa RFC 9557 dat fisèl ki espesifye dat ak lè ak yon konpanse lè zòn, men ou kapab tou kreye objè PlainDate oswa PlainTime lè l sèvi avèk jis yon pati nan fòma dat la. 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
Remake byen ke fisèl sa yo dwe toujou konfòme yo ak fòma espere a, oswa yo pral voye yon erè.
// Sèvi ak yon seri tan ki pa konfòme. Tout bagay sa yo pral voye yon RangeError. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00 AM');
Konsèy pwofesyonèl: Manyen fisèl ki pa ISO Paske Temporal bay priyorite fyab, li pa pral eseye devine fòma yon fisèl tankou 02-01-2026. Si sous done ou a sèvi ak fisèl sa yo, w ap bezwen fè kèk manipilasyon fisèl pou reranje valè yo nan yon fisèl ISO tankou 2026-02-01 anvan ou eseye sèvi ak li ak Temporal.
Fòma Yon fwa ou gen yon Moman oswa yon objè tanporèl, ou pral pwobableman vle konvèti li nan yon fisèl fòma nan kèk pwen. Sa a se yon egzanp kote Moment se yon ti jan pi kout. Ou rele metòd fòma objè a ak yon seri siy ki dekri fòma dat ou vle a. dat konstan = moman ();
console.log(date.format('MM/JJ/AAAA')); // 22/02/2026
console.log(date.format('MMMM Èske YYYY, h:mm:ss a')); // 22 fevriye 2026, 8:18:30 pm
Nan lòt men an, Temporal mande pou ou yon ti jan plis verbose. Objè tanporèl, tankou Instant, gen yon metòd toLocaleString ki aksepte divès opsyon fòma ki espesifye kòm pwopriyete yon objè.
dat const = Temporal.Now.instant ();
// san okenn agiman, nou pral jwenn fòma default pou lokal aktyèl la console.log(date.toLocaleString()); // 2/22/2026, 8:23:36 PM (si yon lokalizasyon en-US)
// pase opsyon fòma pou jenere yon kòd fòma koutim console.log(date.toLocaleString('en-US', { mwa: 'long', jou: 'nimerik', ane: 'nimerik', lè: '2-chif', minit: '2-chif' })); // 22 fevriye 2026 a 8:23 PM
// sèlman pase jaden ou vle yo nan chèn fòma a console.log(date.toLocaleString('en-US', { mwa: 'kout', jou: 'nimerik' })); // 22 fevriye
Fòma dat tanporèl aktyèlman itilize API Intl.DateTimeFormat (ki deja disponib fasilman nan navigatè modèn yo) anba kapo a. Sa vle di ou ka kreye yon objè DateTimeFormat ki kapab itilize ankò ak opsyon fòma koutim ou yo, Lè sa a, pase objè Temporal nan metòd fòma li yo. Poutèt sa, li pa sipòte fòma dat koutim tankou Moment fè. Si ou bezwen yon bagay tankou 'Q1 2026' oswa lòt fòma espesyalize, ou ka bezwen kèk kòd fòma dat koutim oswa jwenn yon bibliyotèk twazyèm pati. const formatè = nouvo Intl.DateTimeFormat('en-US', { mwa: '2-chif', jou: '2-chif', ane: 'nimerik' });
dat const = Temporal.Now.instant (); console.log (formatter.format (dat)); // 22/02/2026
Siy fòma Moment yo pi senp pou ekri, men yo pa zanmitay lokal yo. Fòma kòd "difisil" bagay sa yo tankou lòd mwa/jou. Avantaj lè w sèvi ak yon objè konfigirasyon, menm jan Temporal fè sa, se ke li pral otomatikman adapte yo ak nenpòt ki lokal epi sèvi ak fòma ki kòrèk la. dat const = Temporal.Now.instant ();
const formatOptions = { mwa: 'nimerik', jou: 'nimerik', ane: 'nimerik' };
console.log(date.toLocaleString('en-US', formatOptions)); // 22/2/2026
console.log(date.toLocaleString('en-GB', formatOptions)); // 22/02/2026
Dat kalkil Nan anpil aplikasyon, ou pral bezwen fini fè kèk kalkil sou yon dat. Ou ka vle ajoute oswa soustraksyon inite tan (jou, èdtan, segonn, elatriye). Pou egzanp, si ou gen dat aktyèl la, ou ka vle montre itilizatè a dat la 1 semèn nan kounye a. Objè moman yo gen metòd tankou ajoute ak soustraksyon ki fè operasyon sa yo. Fonksyon sa yo pran yon valè ak yon inite, pa egzanp: ajoute (7, 'jou'). Yon diferans trè enpòtan ant Moman ak Tanporèl, sepandan, se ke lè w ap fè kalkil dat sa yo, objè ki kache a modifye epi valè orijinal li pèdi. const kounye a = moman ();
console.log (kounye a); // Moman<2026-02-24T20:08:36-05:00>
const nextWeek = now.add (7, 'jou'); console.log (semèn pwochèn); // Moman<2026-03-03T20:08:36-05:00>
// Gotcha - objè orijinal la te mitasyon console.log (kounye a); // Moman<2026-03-03T20:08:36-05:00>
Pou evite pèdi dat orijinal la, ou ka rele klonaj sou objè Moment la pou kreye yon kopi. const kounye a= moman(); const nextWeek = now.clone().add(7, 'jou');
console.log (kounye a); // Moman<2026-02-24T20:12:55-05:00>
console.log (semèn pwochèn); // Moman<2026-03-03T20:12:55-05:00>
Nan lòt men an, objè tanporèl yo imuiabl. Yon fwa ou te kreye yon objè tankou yon Instant, PlainDate, ak sou sa, valè objè sa a p ap janm chanje. Objè tanporèl yo genyen tou metòd pou ajoute ak soustraksyon. Tanporèl se yon ti kras serye sou ki inite tan yo ka ajoute nan ki kalite objè. Pou egzanp, ou pa ka ajoute jou nan yon Instant:
const kounye a = Temporal.Now.instant (); const nextWeek = now.add({ jou: 7}); // RangeError: Erè tanporèl: Pi gwo inite pa kapab yon inite dat
Sa a se paske objè Instant reprezante yon pwen espesifik nan tan nan UTC epi yo agnostik kalandriye. Paske longè yon jou a ka chanje selon règ zòn lè tankou lè vapè, kalkil sa a pa disponib sou yon Instant. Ou ka, sepandan, fè operasyon sa a sou lòt kalite objè, tankou yon PlainDateTime: const kounye a = Temporal.Now.plainDateTimeISO (); console.log(now.toLocaleString()); // 2/24/2026, 8:23:59 PM
const nextWeek = now.add({ jou: 7});
// Remake byen ke PlainDateTime orijinal la rete san chanjman console.log(now.toLocaleString()); // 2/24/2026, 8:23:59 PM
console.log(nextWeek.toLocaleString()); // 3/3/2026, 8:23:59 PM
Ou ka kalkile tou konbyen tan ki genyen ant de objè Moman oswa Tanporèl. Avèk fonksyon diff Moment la, ou bezwen bay yon inite pou granularite, otreman li pral retounen diferans lan nan milisgond. const date1 = moman('2026-02-21T09:00:00'); const date2 = moman('2026-02-22T10:30:00');
console.log (date2.diff (dat1)); // 91800000
console.log (date2.diff (dat1, 'jou')); // 1
Pou fè sa ak yon objè Tanporèl, ou ka pase yon lòt objè Tanporèl nan metòd li yo jiskaske oswa depi. Sa a retounen yon objè Temporal.Duration ki gen enfòmasyon sou diferans tan an. Objè a Duration gen pwopriyete pou chak eleman nan diferans lan, epi tou li ka jenere yon kòd dire ISO 8601 ki reprezante diferans nan tan.
const date1 = Temporal.PlainDateTime.from('2026-02-21T09:00:00'); const date2 = Temporal.PlainDateTime.from('2026-02-22T10:30:00');
// pi gwoInite presize pi gwo inite tan pou reprezante // nan kalkil la dire const diff = dat2.depi (dat1, {pi gwoInite: 'jou'});
console.log (diff.days); // 1
console.log (diff.hours); // 1
console.log (dif. minit); // 30
console.log(diff.toString()); // P1DT1H30M // (ISO 8601 fisèl dire: 1 jou, 1 èdtan, 30 minit)
Konpare Dat ak Lè Moman ak Temporal tou de pèmèt ou konpare dat ak lè pou detèmine kilès ki vini anvan lòt la, men pran diferan apwòch ak API a. Moman bay metòd tankou isBefore, isAfter, ak isSame pou konpare de objè Moment. const date1 = moman('2026-02-21T09:00:00'); const date2 = moman('2026-02-22T10:30:00');
console.log (date1.isBefore (dat2)); // vre
Temporal itilize yon metòd konpare estatik pou fè yon konparezon ant de objè ki gen menm kalite. Li retounen -1 si premye dat la vini anvan dezyèm lan, 0 si yo egal, oswa 1 si premye dat la vini apre dezyèm lan. Egzanp sa a montre kijan pou konpare de objè PlainDate. Tou de agiman pou Temporal.PlainDate.compare dwe objè PlainDate.
const date1 = Temporal.PlainDate.from({ ane: 2026, mwa: 2, jou: 24}); const date2 = Temporal.PlainDate.from({ ane: 2026, mwa: 3, jou: 24});
// dat1 vini anvan dat2, kidonk -1 console.log(Temporal.PlainDate.compare (dat1, dat2));
// Erè si nou eseye konpare de objè ki diferan kalite console.log(Temporal.PlainDate.compare(date1, Temporal.Now.instant())); // TypeError: Erè tanporèl: Yo bay jaden PlainDate ki pa valab.
An patikilye, sa fè li fasil pou klase yon etalaj de objè tanporèl kwonolojik. // Yon etalaj de objè Temporal.PlainDate dat konst = [ ... ];
// itilize Temporal.PlainDate.compare kòm fonksyon konparezon dates.sort(Temporal.PlainDate.compare);
Konvèsyon Zòn Tan Bibliyotèk Moment debaz la pa sipòte konvèsyon zòn tan. Si ou bezwen fonksyonalite sa a, ou bezwen tou enstale pake moman-timezone. Pake sa a pa tree-chakable, ak Se poutèt sa ka ajoute anpil nan gwosè pake ou a. Yon fwa ou te enstale moman-timezone, ou ka konvèti objè Moment nan diferan zòn tan ak metòd tz la. Menm jan ak lòt operasyon Moment, sa a mutation kache aobjè. // Sipoze lè lès Etazini const kounye a = moman (); console.log (kounye a); // Moman<2026-02-28T20:08:20-05:00>
// Konvèti nan tan Pasifik la. // Lès orijinal la pèdi. now.tz('America/Los_Angeles'); console.log (kounye a); // Moman<2026-02-28T17:08:20-08:00>
Fonksyonalite zòn tan yo bati nan API Temporal la lè w ap itilize yon objè Temporal.ZonedDateTime. Objè sa yo gen ladan yon metòd withTimeZone ki retounen yon nouvo ZonedDateTime ki reprezante menm moman an nan tan, men nan zòn tan espesifye a. // Ankò, sipoze lè lès Etazini const kounye a = Temporal.Now.zonedDateTimeISO (); console.log(now.toLocaleString()); // 2/28/2026, 8:12:02 PM EST
// Konvèti nan tan Pasifik la const nowPacific = now.withTimeZone('America/Los_Angeles'); console.log(nowPacific.toLocaleString()); // 2/28/2026, 5:12:02 PM PST
// Objè orijinal la pa chanje console.log(now.toLocaleString()); // 2/28/2026, 8:12:02 PM EST
Remak: Valè fòma yo retounen pa toLocaleString yo, jan non an implique, depandan lokal yo. Kòd echantiyon an te devlope nan lokal en-US, kidonk fòma sa a: 2/28/2026, 5:12:02 PM PST. Nan yon lòt lokal, sa a ka diferan. Pou egzanp, nan lokal en-GB, ou ta jwenn yon bagay tankou 28/2/2026, 17:12:02 GMT-8. Yon Refactors nan mond reyèl la Sipoze nou ap konstwi yon aplikasyon pou pwograme evènman atravè zòn tan yo. Yon pati nan aplikasyon sa a se yon fonksyon, getEventTimes, ki pran yon kòd ISO 8601 ki reprezante lè ak dat evènman an, yon zòn lè lokal, ak yon zòn tan sib. Fonksyon an kreye fòma tan ak dat fisèl pou evènman an nan toude zòn tan yo. Si yo bay fonksyon an yon fisèl antre ki pa yon fisèl tan/dat ki valab, li pral voye yon erè. Isit la nan aplikasyon orijinal la, lè l sèvi avèk Moment (tou ki egzije pou sèvi ak pake moman-timezone).
enpòte moman soti nan 'moman-timezone';
fonksyon getEventTimes(inputString, userTimeZone, targetTimeZone) { const timeFormat = 'MMM D, YYYY, h:mm:ss a z';
// 1. Kreye moman inisyal la nan zòn lè itilizatè a const eventTime = moman.tz( inputString, moment.ISO_8601, // Atann yon kòd ISO 8601 vre, // Analiz strik userTimeZone );
// Voye yon erè si inputString la pa reprezante yon dat valab si (!eventTime.isValid()) { throw new Error('Dat/tan ki pa valab'); }
// 2. Kalkile tan sib la // KRITIK: Nou dwe klonaj, oswa 'eventTime' chanje pou tout tan! const targetTime = eventTime.clone().tz(targetTimeZone);
retounen { lokal: eventTime.format (timeFormat), sib: targetTime.format (timeFormat), }; }
orè const = getEventTimes( '2026-03-05T15:00-05:00', 'Amerik/New_York', 'Ewòp/London', );
console.log(schedule.local); // 5 mas 2026, 3:00:00 pm EST
console.log(schedule.target); // 5 mas 2026, 8:00:00 pm GMT
Nan egzanp sa a, nou ap itilize yon fòma dat espere nan ISO 8601, ki se itil ki bati nan Moment. Nou ap itilize tou parsing strik, ki vle di Moman pa pral eseye devine ak yon kòd dat ki pa matche ak fòma a. Si yo pase yon kòd dat ki pa ISO, sa pral lakòz yon objè dat ki pa valab, epi nou voye yon erè. Aplikasyon Tanporèl la sanble, men li gen kèk diferans kle.
fonksyon getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. Analize opinyon an dirèkteman nan yon Instant, Lè sa a, kreye // yon ZonedDateTime nan zòn itilizatè a. const instant = Temporal.Instant.from (inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);
// 2. Konvèti nan zòn sib la // Sa a otomatikman retounen yon NOUVO objè; 'eventTime' an sekirite. const targetTime = eventTime.withTimeZone(targetTimeZone);
// 3. Fòma lè l sèvi avèk Intl (konstriksyon) opsyon const = { ane: 'nimerik', mwa: 'kout', jou: 'nimerik', lè: 'nimerik', minit: '2-chif', dezyèm: '2-chif', timeZoneName: 'kout' };
retounen { lokal: eventTime.toLocaleString (navigator.language, opsyon), sib: targetTime.toLocaleString(navigator.language, opsyon) }; }
orè const = getEventTimes( '2026-03-05T15:00-05:00', 'Amerik/New_York', 'Ewòp/London', );
console.log(schedule.local); // 5 mas 2026, 3:00:00 PM EST
console.log(schedule.target); // 5 mas 2026, 8:00:00 PM GMT
Avèk Moment, nou dwe presize klèman yon fisèl fòma pou fisèl dat yo ki kapab lakòz. Kèlkeswa kote itilizatè a oswa lokalizasyon an, lè evènman yo ap toujou fòma kòm 5 mas 2026, 3:00:00.pm EST. Epitou, nou pa oblije eksplisitman voye yon eksepsyon. Si yo pase yon kòd ki pa valab bay Temporal.Instant.from, Temporal ap voye eksepsyon an pou nou. Youn nan bagay yo sonje se ke menm ak parsing strik, vèsyon an Moment se toujou plis tolerans. Tanporèl mande pou konpanse nan zòn tan nan fen fisèl la. Ou ta dwe sonje tou ke piske n ap itilize navigator.language, kòd sa a pral sèlman kouri nan yon anviwònman navigatè, kòm navigatè pa defini nan yon anviwònman Node.js. Aplikasyon Tanporèl la itilize lokal aktyèl navigatè a (navigator.language), kidonk itilizatè a pral otomatikman jwenn fòma lè evènman yo nan fòma lè lokal yo. Nan lokal en-US, sa a se 5 mas 2026, 3:00:00 pm EST. Sepandan, si itilizatè a nan Lond, pou egzanp, lè evènman yo pral fòma kòm 5 mas 2026, 15:00:00 GMT-5. Rezime
Aksyon Moman.js Tanporèl Tan aktyèl la moman () Temporal.Now.zonedDateTimeISO() Analiz ISO moman (str) Temporal.Instant.from(str) Ajoute tan .add(7, 'jou') (mutation) .add({ jou: 7}) (nouvo objè) Diferans .diff(lòt, 'èdtan') .depi(lòt).èdtan Zòn tan .tz('Zòn/Non') .withTimeZone('Zòn/Non')
Nan premye gade, diferans lan ka yon ti kras diferan (ak nan ka a nan Temporal, pafwa plis pwolib ak plis strik) sentaks, men gen plizyè avantaj kle nan itilize Temporal sou Moment.js:
Lè ou pi klè vle di mwens supriz ak pinèz envolontè. Moman ka parèt pi induljans, men li enplike "devine," ki pafwa ka lakòz dat kòrèk. Si ou bay Temporal yon bagay ki pa valab, li voye yon erè. Si kòd la kouri, ou konnen ou gen yon dat valab. Moman ka ajoute yon gwosè enpòtan nan pake aplikasyon an, sitou si w ap itilize pake moman-timezone a. Temporal pa ajoute anyen (yon fwa li anbake nan navigatè sib ou yo). Imutabilite ba ou konfyans ke ou pap janm pèdi oswa ranplase done lè w ap fè konvèsyon dat ak operasyon yo. Diferan reprezantasyon tan (Instant, PlainDateTime, ZonedDateTime) depann sou kondisyon ou yo, kote Moment se toujou yon anbalaj alantou yon timestamp UTC. Temporal sèvi ak API Intl yo pou fòma dat, ki vle di ou ka gen fòma lokal yo san yo pa bezwen presize siy klèman.
Nòt sou Polyfill la Kòm mansyone pi bonè, gen yon Polyfill Temporal ki disponib, distribye kòm yon pake npm ki rele @js-temporal/polyfill. Si w vle itilize Temporal jodi a, w ap bezwen polyfill sa a pou sipòte navigatè tankou Safari ki poko voye API a. Move nouvèl la ak sa a se ke li pral ajoute nan gwosè pake ou a. Bon nouvèl la se ke li toujou ajoute siyifikativman mwens pase moman oswa moman-timezone. Men yon konparezon gwosè pake jan Bundlephobia.com rapòte, yon sit entènèt ki prezante enfòmasyon sou gwosè pake npm (klike sou chak non pake pou wè analiz Bundlephobia):
Pake Minifye Minified & gzipped @js-temporal/polyfill 154.1 KB 44.1 kB moman 294.4 KB 75.4 kB moman-timezone 1 MB 114.2 kB
Polyfill la tou te gen istorikman kèk pwoblèm pèfòmans alantou itilizasyon memwa, ak nan moman sa a nan ekri, li konsidere kòm nan yon eta alfa. Poutèt sa, ou ka pa vle sèvi ak li nan pwodiksyon jiskaske li rive nan yon eta ki gen plis matirite. Lòt bon nouvèl la se ke èspere ke polyfill la pa pral bezwen anpil ankò (sòf si ou bezwen sipòte pi gran navigatè, nan kou). Nan moman sa a, Temporal te anbake nan Chrome, Edge, ak Firefox. Li pa byen pare nan Safari ankò, menm si li parèt disponib ak yon drapo ègzekutabl sou dènye Teknoloji Preview la.