Kważi kull tip ta 'applikazzjoni miktuba f'JavaScript taħdem b'ħinijiet jew dati f'xi kapaċità. Fil-bidu, dan kien limitat għall-API Data integrata. Din l-API tinkludi funzjonalità bażika, iżda hija pjuttost limitata f'dak li tista 'tagħmel. Libreriji ta’ partijiet terzi bħal Moment.js, u aktar tard APIs integrati bħall-Intl APIs u l-API Temporal il-ġdida, iżidu flessibbiltà ferm akbar biex jaħdmu bil-ħinijiet u d-dati. Iż-Żieda U l-waqgħa Tal-Mument.js Moment.js hija librerija JavaScript b'utilitajiet qawwija biex taħdem bi ħinijiet u dati. Jinkludi karatteristiċi neqsin mill-API Data bażika, bħall-manipulazzjoni taż-żona tal-ħin, u jagħmel ħafna operazzjonijiet komuni aktar sempliċi. Il-mument jinkludi wkoll funzjonijiet għall-ifformattjar tad-dati u l-ħinijiet. Sar librerija użata ħafna f'ħafna applikazzjonijiet differenti. Madankollu, il-Mument kellu wkoll is-sehem tiegħu ta 'kwistjonijiet. Hija librerija kbira, u tista 'żżid b'mod sinifikanti mad-daqs tal-pakkett ta' applikazzjoni. Minħabba li l-librerija ma tappoġġjax it-tħawwid tas-siġar (karatteristika ta 'bundlers moderni li jistgħu jneħħu partijiet mhux użati tal-libreriji), il-librerija kollha tal-Mument hija inkluża anki jekk tuża biss waħda jew tnejn mill-funzjonijiet tagħha. Kwistjoni oħra bil-Mument hija l-fatt li l-oġġetti li toħloq huma mutevoli. Is-sejħa ta 'ċerti funzjonijiet fuq oġġett tal-Mument għandha effetti sekondarji u tbiddel il-valur ta' dak l-oġġett. Dan jista 'jwassal għal imġieba mhux mistennija jew bugs. Fl-2020, il-mantenituri tal-Mument iddeċidew li jpoġġu l-librerija fil-mod ta 'manutenzjoni. M'hu qed isir l-ebda żvilupp ta' karatteristiċi ġodda, u dawk li jżommu jirrakkomandaw li ma tużahx għal proġetti ġodda. Hemm libreriji oħra ta 'data JavaScript, bħal data-fns, iżda hemm player ġdid fil-belt, API mibnija direttament f'JavaScript: Temporal. Huwa standard ġdid li jimla t-toqob tal-API tad-Data oriġinali kif ukoll isolvi xi wħud mil-limitazzjonijiet misjuba fil-Mument u libreriji oħra. X'inhu Temporal? Temporal hija API ġdida ta' ħin u data li qed tiżdied mal-istandard ECMAScript, li jiddefinixxi JavaScript modern. Minn Marzu 20266, wasal fl-Istadju 4 tal-proċess TC39 (il-kumitat li jissorvelja l-proposti u ż-żidiet mal-lingwa JavaScript), u se jkun inkluż fil-verżjoni li jmiss tal-ispeċifikazzjoni ECMAScript. Diġà ġie implimentat f'diversi browsers: Chrome 144+ u Firefox 139+, b'Safari mistenni li jsegwi dalwaqt. Polyfill huwa wkoll disponibbli għal browsers mhux appoġġjati u Node.js. L-API Temporal toħloq oġġetti li, ġeneralment, jirrappreżentaw mumenti fiż-żmien. Dawn jistgħu jkunu timbri full-time u data f'żona tal-ħin partikolari, jew jistgħu jkunu eżempju ġeneriku ta 'ħin ta' "arloġġ tal-ħajt" mingħajr ebda informazzjoni dwar iż-żona tal-ħin jew id-data. Xi wħud mill-karatteristiċi ewlenin ta 'Temporal jinkludu:
Ħinijiet bid-dati jew mingħajrhom. Oġġett temporali jista' jirrappreżenta ħin speċifiku f'data speċifika, jew ħin mingħajr ebda informazzjoni dwar id-data. Data speċifika, mingħajr ħin, tista' wkoll tkun rappreżentata. Appoġġ taż-żona tal-ħin. L-oġġetti temporanji huma kompletament konxji taż-żona tal-ħin u jistgħu jiġu kkonvertiti f'żoni tal-ħin differenti. Il-mument jappoġġja ż-żoni tal-ħin ukoll, iżda jeħtieġ il-librerija addizzjonali taż-żona tal-ħin tal-mument. Immutabilità. Ladarba jinħoloq oġġett Temporali, ma jistax jinbidel. L-aritmetika tal-ħin jew il-konverżjonijiet taż-żona tal-ħin ma jimmodifikawx l-oġġett sottostanti. Minflok, jiġġeneraw oġġett Temporali ġdid. Indiċjar ibbażat fuq 1. Sors komuni ta 'bugs bl-API tad-Data (kif ukoll mal-Mument) huwa li x-xhur huma indiċjati żero. Dan ifisser li Jannar huwa x-xahar 0, aktar milli l-1 xahar kif nifhmu lkoll fil-ħajja reali. Temporal jirranġa dan billi juża indiċjar ibbażat fuq 1 - Jannar huwa l-1 xahar. Hija mibnija fil-browser. Peress li Temporal hija API fil-browser innifsu, ma żżid xejn mad-daqs tal-pakkett tal-applikazzjoni tiegħek.
Huwa importanti wkoll li wieħed jinnota li l-API tad-Data mhux sejjer. Filwaqt li Temporal jissostitwixxi din l-API, mhix qed titneħħa jew deprecata. Ħafna applikazzjonijiet jinkisru jekk il-browsers ineħħu f'daqqa l-API tad-Data. Madankollu, iżomm f'moħħu wkoll li Moment issa huwa kkunsidrat bħala proġett legat fil-mod ta 'manutenzjoni. Fil-bqija tal-artiklu, ser inħarsu lejn xi "riċetti" għall-migrazzjoni tal-kodiċi bbażat fuq il-Mument għall-API Temporali l-ġdida. Ejja nibdew nirrefactoring! Ħolqien ta 'Oġġetti ta' Data U Ħin Qabel ma nkunu nistgħu nimanipulaw id-dati u l-ħinijiet, irridu noħolqu oġġetti li jirrappreżentawhom. Biex toħloq oġġett Mument li jirrappreżenta d-data u l-ħin kurrenti, uża l-funzjoni tal-mument. const issa = mument (); console.log(issa); // Mument<2026-02-18T21:26:29-05:00>
Dan l-oġġett issa jista' jiġi fformattjat jew manipulat kif meħtieġ.
// jikkonverti għal UTC //twissija: Dan jibdel l-oġġett tal-Mument u jpoġġih fil-modalità UTC! console.log(issa.utc()); // Mument<2026-02-19T02:26:29Z>
// tipprintja string ifformattjata - innota li qed tuża l-ħin UTC issa console.log(issa.format('XX/JJ/SSSS hh:mm:ss a')); // 19/02/2026 02:27:07 am
Il-ħaġa ewlenija li għandek tiftakar dwar il-Mument hija li oġġett tal-Mument dejjem jinkludi informazzjoni dwar il-ħin u d-data. Jekk għandek bżonn taħdem biss b'informazzjoni dwar il-ħin, dan ġeneralment ikun tajjeb, iżda jista 'jikkawża imġieba mhux mistennija f'sitwazzjonijiet bħall-Ħin tas-Sajf jew snin biżestili, fejn id-data jista' jkollha effett fuq il-kalkoli tal-ħin. Temporal huwa aktar flessibbli. Tista 'toħloq oġġett li jirrappreżenta d-data u l-ħin kurrenti billi toħloq oġġett Temporal.Instant. Dan jirrappreżenta punt fil-ħin definit mill-ħin minn "l-epoka" (nofs il-lejl UTC fl-1 ta' Jannar, 1970). Temporal jista 'jirreferi dan l-istante fil-ħin bi preċiżjoni fil-livell nanosekondi. const issa = Temporal.Now.instant ();
// ara n-nanosekondi mhux maħduma mill-epoka console.log(issa.epochNanoseconds); // 1771466342612000000n
// format għall-UTC console.log(issa.toString()); // 2026-02-19T01:55:27.844Z
// format għal żona tal-ħin partikolari console.log(now.toString({ TimeZone: 'Amerika/New_York' })); // 2026-02-18T20:56:57.905-05:00
Oġġetti Temporal.Instant jistgħu jinħolqu wkoll għal żmien u data speċifiċi billi tuża l-metodu minn statiku.
const myInstant = Temporal.Instant.from('2026-02-18T21:10:00-05:00');
// Format l-instant fiż-żona tal-ħin lokali. Innota li dan jikkontrolla biss // l-ifformattjar - ma jbiddel l-oġġett bħal moment.utc jagħmel. console.log(myInstant.toString({ TimeZone: 'Amerika/New_York' })); // 2026-02-18T21:10:00-05:00
Tista' wkoll toħloq tipi oħra ta' oġġetti Temporali, inklużi:
Temporal.PlainDate: Data mingħajr informazzjoni dwar il-ħin. Temporal.PlainTime: Ħin mingħajr informazzjoni dwar id-data. Temporal.ZonedDateTime: Data u ħin f'żona tal-ħin speċifika.
Kull wieħed minn dawn għandu metodu minn li jista 'jissejjaħ b'oġġett li jispeċifika d-data u/jew il-ħin, jew sekwenza ta' data biex tiġi analizzata. // Data biss const illum = Temporal.PlainDate.from({ sena: 2026, xahar: 2, // innota li qed nużaw 2 għal Frar jum: 18 }); console.log(today.toString()); // 2026-02-18
// Ħin biss const lunchTime = Temporal.PlainTime.from({ siegħa: 12 }); console.log(lunchTime.toString()); // 12:00:00
// Data u ħin fiż-żona tal-ħin tal-Lvant tal-Istati Uniti const dueAt = Temporal.ZonedDateTime.from({ TimeZone: 'Amerika/New_York', sena: 2026, xahar: 3, jum: 1, siegħa: 12, minuta: 0, it-tieni: 0 }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[Amerika/New_York]
Parsing Konna koprejna l-ħolqien programmatiku ta’ informazzjoni dwar id-data u l-ħin. Issa ejja nħarsu lejn parsing. L-analiżi hija qasam wieħed fejn il-Mument huwa aktar flessibbli mill-API Temporal integrata. Tista' tparsa string tad-data billi tgħaddiha lill-funzjoni tal-mument. B'argument wieħed, Moment jistenna string ta 'data ISO, iżda tista' tuża formati alternattivi jekk tipprovdi t-tieni argument li jispeċifika l-format tad-data li qed jintuża.
const isoDate = moment('2026-02-21T09:00:00'); const formattedDate = moment('2/21/26 9:00:00', 'M/J/YY h:mm:ss');
console.log(isoDate); // Il-mument<2026-02-21T09:00:00-05:00>
console.log(formattedDate); // Il-mument<2026-02-21T09:00:00-05:00>
F'verżjonijiet eqdem, Moment jagħmel l-aħjar raden biex janalizza kwalunkwe sekwenza ta 'data fformattjata b'mod arbitrarju. Dan jista' jwassal għal riżultati imprevedibbli. Pereżempju, 02-03-2026 huwa 2 ta' Frar jew 3 ta' Marzu? Għal din ir-raġuni, verżjonijiet aktar ġodda ta’ Moment juru twissija ta’ deprekazzjoni prominenti jekk tissejjaħ mingħajr string ta’ data ifformattjata ISO (sakemm ma jingħatax ukoll it-tieni argument bil-format mixtieq). Temporal se parse biss sekwenza ta' data ifformattjata speċifikament. Is-sekwenza trid tkun konformi mal-format ISO 8601 jew l-estensjoni tiegħu, RFC 9557. Jekk sekwenza ta' data mhux konformi tiġi mgħoddija għal metodu minn, Temporal se tarmi RangeError.
// Bl-użu ta' sekwenza ta' data RFC 9557 const myDate = Temporal.Instant.from('2026-02-21T09:00:00-05:00[Amerika/New_York]'); console.log(myDate.toString({ TimeZone: 'Amerika/New_York' })); // 2026-02-21T09:00:00-05:00
// Bl-użu ta' sekwenza ta' data mhux magħrufa const otherDate = Temporal.Instant.from('2/21/26 9:00:00'); // RangeError: Żball temporali: Karattru invalidu waqt l-analiżi tal-valur tas-sena.
Ir-rekwiżiti eżatti tas-sekwenza tad-data jiddependu fuq liema tip ta 'oġġett Temporali qed toħloq. Fl-eżempju ta 'hawn fuq, Temporal.Instant jeħtieġ ISO sħiħSekwenza tad-data 8601 jew RFC 9557 li tispeċifika d-data u l-ħin b'offset taż-żona tal-ħin, iżda tista' wkoll toħloq oġġetti PlainDate jew PlainTime billi tuża biss subsett tal-format tad-data. 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
Innota li dawn l-istrings xorta jridu jikkonformaw mal-format mistenni, jew se jintrema żball.
// Bl-użu ta 'kordi ta' ħin mhux konformi. Dawn kollha se jitfgħu RangeError. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00 AM');
Tip pro: Immaniġġjar ta 'kordi mhux ISO Minħabba li Temporal jagħti prijorità lill-affidabbiltà, mhux se jipprova raden il-format ta' spag bħal 02-01-2026. Jekk is-sors tad-dejta tiegħek juża kordi bħal dawn, ser ikollok bżonn tagħmel xi manipulazzjoni tal-kordi biex tirranġa mill-ġdid il-valuri f'sekwenza ISO bħal 2026-02-01 qabel ma tipprova tużaha ma 'Temporal.
Ifformattjar Ladarba jkollok oġġett tal-Mument jew Temporali, probabilment trid tikkonvertih f'sekwenza ifformattjata f'xi punt. Dan huwa eżempju fejn il-Mument huwa daqsxejn aktar konċiż. Int issejjaħ il-metodu tal-format tal-oġġett b'sensiela ta 'tokens li jiddeskrivu l-format tad-data mixtieq. const data = mument ();
console.log(data.format('XX/JJ/SSSS')); // 22/02/2026
console.log(data.format('MMMM Do SSSS, h:mm:ss a')); // 22 ta’ Frar 2026, 8:18:30 pm
Min-naħa l-oħra, Temporal teħtieġ li tkun daqsxejn aktar verbose. Oġġetti temporali, bħal Instant, għandhom metodu toLocaleString li jaċċetta diversi għażliet ta 'formattjar speċifikati bħala proprjetajiet ta' oġġett.
const data = Temporal.Now.instant ();
// bla argumenti, aħna ser niksbu l-format default għal-lokal attwali console.log (data.toLocaleString ()); // 2/22/2026, 8:23:36 PM (jekk wieħed jassumi lokalità ta' en-US)
// tgħaddi l-għażliet tal-ifformattjar biex tiġġenera string ta’ format personalizzat console.log(date.toLocaleString('en-US', { xahar: 'twil', jum: 'numeriku', sena: 'numeriku', siegħa: '2-ċifri', minuta: '2-ċifri' })); // 22 ta’ Frar 2026 fit-8:23 PM
// jgħaddi biss l-oqsma li trid fis-sekwenza tal-format console.log(date.toLocaleString('en-US', { xahar: 'qasir', jum: 'numeriku' })); // 22 ta’ Frar
L-ifformattjar tad-data temporali fil-fatt juża l-API Intl.DateTimeFormat (li diġà hija disponibbli fil-browsers moderni) taħt il-barnuża. Dan ifisser li tista 'toħloq oġġett DateTimeFormat li jista' jerġa 'jintuża bl-għażliet tal-ifformattjar tad-dwana tiegħek, imbagħad tgħaddi oġġetti Temporali għall-metodu tal-format tiegħu. Minħabba dan, ma jappoġġjax formati tad-data tad-dwana bħalma jagħmel il-Mument. Jekk għandek bżonn xi ħaġa bħal 'Q1 2026' jew ifformattjar speċjalizzat ieħor, jista 'jkollok bżonn xi kodiċi tal-ifformattjar tad-data tad-dwana jew tilħaq librerija ta' parti terza. const formatter = ġdid Intl.DateTimeFormat('en-US', { xahar: '2-ċifri', jum: '2-ċifri', sena: 'numeriku' });
const data = Temporal.Now.instant (); console.log(formatter.format(data)); // 22/02/2026
It-tokens tal-ifformattjar tal-mument huma aktar sempliċi biex jinkitbu, iżda mhumiex favur il-lokal. Il-format strings "hard code" affarijiet bħall-ordni ta 'xahar/jum. Il-vantaġġ tal-użu ta' oġġett ta' konfigurazzjoni, kif jagħmel Temporal, huwa li jadatta awtomatikament għal kwalunkwe lokalità partikolari u juża l-format korrett. const data = Temporal.Now.instant ();
const formatOptions = { xahar: 'numeriku', jum: 'numeriku', sena: 'numeriku' };
console.log(date.toLocaleString('en-US', formatOptions)); // 2/22/2026
console.log(date.toLocaleString('en-GB', formatOptions)); // 22/02/2026
Kalkoli tad-data F'ħafna applikazzjonijiet, ikollok bżonn tispiċċa twettaq xi kalkoli f'data. Tista' tkun trid iżżid jew tnaqqas unitajiet ta' ħin (jiem, sigħat, sekondi, eċċ.). Per eżempju, jekk għandek id-data attwali, tista 'tixtieq turi lill-utent id-data ġimgħa minn issa. L-oġġetti tal-mument għandhom metodi bħal żid u naqqas li jwettqu dawn l-operazzjonijiet. Dawn il-funzjonijiet jieħdu valur u unità, pereżempju: add(7, 'jiem'). Differenza importanti ħafna bejn Moment u Temporal, madankollu, hija li meta jsiru dawn il-kalkoli tad-data, l-oġġett sottostanti jiġi modifikat u l-valur oriġinali tiegħu jintilef. const issa = mument ();
console.log(issa); // Il-mument<2026-02-24T20:08:36-05:00>
const nextWeek = issa.add (7, 'jiem'); console.log(il-ġimgħa d-dieħla); // Il-mument<2026-03-03T20:08:36-05:00>
// Gotcha - l-oġġett oriġinali kien mibdul console.log(issa); // Il-mument<2026-03-03T20:08:36-05:00>
Biex tevita li titlef id-data oriġinali, tista 'ċċempel klonu fuq l-oġġett tal-Mument biex toħloq kopja. const issa= mument (); const nextWeek = issa.clone().add(7, 'jiem');
console.log(issa); // Il-mument<2026-02-24T20:12:55-05:00>
console.log(il-ġimgħa d-dieħla); // Il-mument<2026-03-03T20:12:55-05:00>
Min-naħa l-oħra, l-oġġetti temporali huma immutabbli. Ladarba tkun ħloqt oġġett bħal Instant, PlainDate, u l-bqija, il-valur ta 'dak l-oġġett qatt mhu se jinbidel. L-oġġetti temporali għandhom ukoll metodi ta' żid u naqqas. Temporal huwa ftit picky dwar liema unitajiet ta 'ħin jistgħu jiġu miżjuda ma' liema tipi ta 'oġġetti. Pereżempju, ma tistax iżżid ġranet ma' Instant:
const issa = Temporal.Now.instant (); const nextWeek = issa.add ({ ijiem: 7 }); // RangeError: Żball temporali: L-akbar unità ma tistax tkun unità tad-data
Dan għaliex l-oġġetti Instant jirrappreżentaw punt speċifiku fil-ħin fl-UTC u huma agnostiċi tal-kalendarju. Minħabba li t-tul ta' ġurnata jista' jinbidel abbażi tar-regoli taż-żona tal-ħin bħall-Ħin tas-Sajf, dan il-kalkolu mhuwiex disponibbli fuq Instant. Tista', madankollu, twettaq din l-operazzjoni fuq tipi oħra ta' oġġetti, bħal PlainDateTime: const issa = Temporal.Now.plainDateTimeISO (); console.log (issa.toLocaleString ()); // 2/24/2026, 8:23:59 PM
const nextWeek = issa.add ({ ijiem: 7 });
// Innota li l-PlainDateTime oriġinali jibqa' mhux mibdul console.log (issa.toLocaleString ()); // 2/24/2026, 8:23:59 PM
console.log(nextWeek.toLocaleString()); // 3/3/2026, 8:23:59 PM
Tista' wkoll tikkalkula kemm hemm ħin bejn żewġ oġġetti Mument jew Temporali. Bil-funzjoni diff ta 'Moment, għandek bżonn tipprovdi unità għall-granularità, inkella tirritorna d-differenza f'millisekondi. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');
console.log(data2.diff(data1)); // 91800000
console.log(data2.diff(data1, 'jiem')); // 1
Biex tagħmel dan b'oġġett Temporali, tista 'tgħaddi oġġett Temporali ieħor lill-metodi tiegħu sakemm jew peress. Dan jirritorna oġġett Temporal.Duration li fih informazzjoni dwar id-differenza fil-ħin. L-oġġett Duration għandu proprjetajiet għal kull komponent tad-differenza, u wkoll jista 'jiġġenera sekwenza ta' tul ISO 8601 li tirrappreżenta d-differenza fil-ħin.
const date1 = Temporal.PlainDateTime.from('2026-02-21T09:00:00'); const date2 = Temporal.PlainDateTime.from('2026-02-22T10:30:00');
// l-akbarUnità tispeċifika l-akbar unità ta’ ħin li trid tirrappreżenta // fil-kalkolu tat-tul const diff = data2.since(data1, {akbarUnità: 'jum'});
console.log(diff.days); // 1
console.log (diff.hours); // 1
console.log(diff.minuti); // 30
console.log(diff.toString()); // P1DT1H30M // (sekwenza ta' tul ISO 8601: ġurnata, siegħa, 30 minuta)
Tqabbil Dati U Ħinijiet Moment u Temporal it-tnejn iħalluk tqabbel id-dati u l-ħinijiet biex tiddetermina liema tiġi qabel l-oħra, iżda tieħu approċċi differenti mal-API. Moment jipprovdi metodi bħal isBefore, isAfter, u isSame biex iqabblu żewġ oġġetti tal-Mument. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');
console.log(data1.isBefore(data2)); // veru
Temporal juża metodu ta 'tqabbil statiku biex iwettaq paragun bejn żewġ oġġetti tal-istess tip. Jirritorna -1 jekk l-ewwel data tiġi qabel it-tieni, 0 jekk huma ugwali, jew 1 jekk l-ewwel data tiġi wara t-tieni. L-eżempju li ġej juri kif tqabbel żewġ oġġetti PlainDate. Iż-żewġ argumenti għal Temporal.PlainDate.compare għandhom ikunu oġġetti PlainDate.
const date1 = Temporal.PlainDate.from({ sena: 2026, xahar: 2, jum: 24}); const date2 = Temporal.PlainDate.from({ sena: 2026, xahar: 3, jum: 24});
// data1 tiġi qabel data2, għalhekk -1 console.log(Temporal.PlainDate.compare(data1, date2));
// Żball jekk nippruvaw inqabblu żewġ oġġetti ta’ tipi differenti console.log(Temporal.PlainDate.compare(data1, Temporal.Now.instant())); // TypeError: Żball temporali: oqsma PlainDate invalidi pprovduti.
B'mod partikolari, dan jagħmilha faċli biex issolvi firxa ta 'oġġetti Temporali kronoloġikament. // Array ta' oġġetti Temporal.PlainDate const dates = [ ... ];
// uża Temporal.PlainDate.compare bħala l-funzjoni tal-komparatur dates.sort(Temporal.PlainDate.compare);
Konverżjonijiet taż-Żona tal-Ħin Il-librerija ewlenija tal-Mument ma tappoġġjax konverżjonijiet taż-żona tal-ħin. Jekk għandek bżonn din il-funzjonalità, trid tinstalla wkoll il-pakkett tal-mument-timezone. Dan il-pakkett ma jistax jitħawwad bis-siġar, u għalhekk jista 'jżid b'mod sinifikanti mad-daqs tal-pakkett tiegħek. Ladarba tkun installat iż-żona tal-ħin tal-mument, tista 'tikkonverti oġġetti tal-mument f'żoni tal-ħin differenti bil-metodu tz. Bħal operazzjonijiet oħra tal-Mument, dan jibdel is-sottostantioġġett. // Jekk wieħed jassumi l-ħin tal-Lvant tal-Istati Uniti const issa = mument (); console.log(issa); // Il-mument<2026-02-28T20:08:20-05:00>
// Aqleb għall-ħin tal-Paċifiku. // Il-ħin oriġinali tal-Lvant jintilef. now.tz('America/Los_Angeles'); console.log(issa); // Il-mument<2026-02-28T17:08:20-08:00>
Il-funzjonalità taż-żona tal-ħin hija mibnija fl-API Temporal meta tuża oġġett Temporal.ZonedDateTime. Dawn l-oġġetti jinkludu metodu withTimeZone li jirritorna ZonedDateTime ġdid li jirrappreżenta l-istess mument fiż-żmien, iżda fiż-żona tal-ħin speċifikata. // Għal darb'oħra, jekk wieħed jassumi l-ħin tal-Lvant tal-Istati Uniti const issa = Temporal.Now.zonedDateTimeISO (); console.log (issa.toLocaleString ()); // 2/28/2026, 8:12:02 PM EST
// Ikkonverti għall-ħin tal-Paċifiku const nowPacific = now.withTimeZone('America/Los_Angeles'); console.log(nowPacific.toLocaleString()); // 2/28/2026, 5:12:02 PM PST
// L-oġġett oriġinali jibqa' mhux mibdul console.log (issa.toLocaleString ()); // 2/28/2026, 8:12:02 PM EST
Nota: Il-valuri ifformattjati rritornati minn toLocaleString huma, kif jimplika l-isem, dipendenti mil-lokal. Il-kodiċi tal-kampjun ġie żviluppat fil-locale en-US, għalhekk il-format huwa bħal dan: 2/28/2026, 5:12:02 PM PST. F'lokal ieħor, dan jista 'jkun differenti. Pereżempju, fil-locale en-GB, ikollok xi ħaġa bħal 28/2/2026, 17:12:02 GMT-8. Refactoring fid-dinja reali Ejja ngħidu li qed nibnu app għall-iskedar ta’ avvenimenti f’żoni tal-ħin. Parti minn din l-app hija funzjoni, getEventTimes, li tieħu string ISO 8601 li tirrappreżenta l-ħin u d-data tal-avveniment, żona tal-ħin lokali, u żona tal-ħin fil-mira. Il-funzjoni toħloq kordi ta' ħin u data ifformattjati għall-avveniment fiż-żewġ żoni tal-ħin. Jekk il-funzjoni tingħata sekwenza ta' input li mhix sekwenza valida ta' ħin/data, se tarmi żball. Hawn l-implimentazzjoni oriġinali, bl-użu tal-Mument (li jeħtieġ ukoll l-użu tal-pakkett tal-mument-żona tal-ħin).
mument tal-importazzjoni minn 'mument-żona tal-ħin';
funzjoni getEventTimes(inputString, userTimeZone, targetTimeZone) { const timeFormat = 'MMM D, YYYY, h:mm:ss a z';
// 1. Oħloq il-mument inizjali fiż-żona tal-ħin tal-utent const eventTime = moment.tz( inputString, moment.ISO_8601, // Jistennew string ISO 8601 veru, // Parsing strett userTimeZone );
// Tarmi żball jekk l-inputString ma kienx jirrappreżenta data valida jekk (!eventTime.isValid ()) { throw new Error('Invalid data/time input'); }
// 2. Ikkalkula l-ħin fil-mira // KRITIKA: Irridu nikklonu, jew 'eventTime' jinbidel għal dejjem! const targetTime = eventTime.clone().tz(targetTimeZone);
lura { lokali: eventTime.format(timeFormat), mira: targetTime.format(timeFormat), }; }
const schedule = getEventTimes ( '2026-03-05T15:00-05:00', 'Amerika/New_York', 'Ewropa/Londra', );
console.log(schedule.local); // 5 ta’ Marzu 2026, 3:00:00 pm EST
console.log(schedule.target); // 5 ta’ Marzu 2026, 8:00:00 pm GMT
F'dan l-eżempju, qed nużaw format ta' data mistenni ta 'ISO 8601, li huwa mibni b'mod utli fil-Mument. Qed nużaw ukoll parsing strett, li jfisser li l-Mument mhux se jipprova raden b'sekwenza tad-data li ma taqbilx mal-format. Jekk tingħadda string ta 'data mhux ISO, dan jirriżulta f'oġġett ta' data invalidu, u aħna narmi żball. L-implimentazzjoni Temporal tidher simili, iżda għandha ftit differenzi ewlenin.
funzjoni getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. Parse l-input direttament fi Instant, imbagħad oħloq // a ZonedDateTime fiż-żona tal-utent. const instant = Temporal.Instant.from (inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);
// 2. Ikkonverti għaż-żona fil-mira // Dan awtomatikament jirritorna oġġett ĠDID; 'eventTime' huwa sigur. const targetTime = eventTime.withTimeZone(targetTimeZone);
// 3. Format bl-użu ta 'Intl (built-in) const options = { sena: 'numeriku', xahar: 'qasir', jum: 'numeriku', siegħa: 'numeriku', minuta: '2-ċifri', it-tieni: '2-ċifri', timeZoneName: 'qasir' };
lura { lokali: eventTime.toLocaleString(navigator.language, għażliet), mira: targetTime.toLocaleString(navigator.language, għażliet) }; }
const schedule = getEventTimes ( '2026-03-05T15:00-05:00', 'Amerika/New_York', 'Ewropa/Londra', );
console.log(schedule.local); // 5 ta’ Marzu 2026, 3:00:00 PM EST
console.log(schedule.target); // 5 ta’ Marzu 2026, 8:00:00 PM GMT
Bil-Mument, irridu nispeċifikaw b'mod espliċitu sensiela ta' format għall-kordi tad-data li jirriżultaw. Irrispettivament mill-post jew mill-lokal tal-utent, il-ħinijiet tal-avveniment dejjem se jkunu fformattjati bħala 5 ta' Marzu 2026, 3:00:00pm EST. Ukoll, m'għandniex għalfejn nafgħu eċċezzjoni b'mod espliċitu. Jekk string invalida tiġi mgħoddija lil Temporal.Instant.from, Temporal se tarmi l-eċċezzjoni għalina. Ħaġa waħda li wieħed jinnota hija li anke b'parsing strett, il-verżjoni tal-Mument għadha aktar klementi. Temporal teħtieġ l-offset taż-żona tal-ħin fl-aħħar tas-sekwenza. Għandek tinnota wkoll li peress li qed nużaw navigator.language, dan il-kodiċi se jaħdem biss f'ambjent tal-browser, peress li n-navigator mhuwiex definit f'ambjent Node.js. L-implimentazzjoni Temporali tuża l-lokal attwali tal-browser (navigator.language), għalhekk l-utent awtomatikament jikseb il-ħinijiet tal-avvenimenti fformattjati fil-format tal-ħin lokali tiegħu. Fil-lokal tal-en-US, dan huwa l-5 ta' Marzu 2026, 3:00:00 pm EST. Madankollu, jekk l-utent ikun f'Londra, pereżempju, il-ħinijiet tal-avvenimenti jiġu fformattjati bħala 5 ta' Marzu 2026, 15:00:00 GMT-5. Sommarju
Azzjoni Moment.js Temporali Ħin kurrenti mument () Temporal.Now.zonedDateTimeISO() Parsing ISO mument (str) Temporal.Instant.from(str) Żid il-ħin .add(7, 'jiem') (jidawwar) .add({ ijiem: 7 }) (oġġett ġdid) Differenza .diff(oħrajn, 'sigħat') .minn(ohra).sigħat Żona tal-ħin .tz('Żona/Isem') .withTimeZone('Żona/Isem')
L-ewwel daqqa t'għajn, id-differenza tista 'tkun kemmxejn differenti (u fil-każ ta' Temporal, xi drabi aktar verbose u aktar stretta) sintassi, iżda hemm diversi vantaġġi ewlenin biex tuża Temporal fuq Moment.js:
Li tkun aktar espliċita tfisser inqas sorpriżi u bugs mhux intenzjonati. Il-mument jista 'jidher li jkun aktar klementi, iżda jinvolvi "suppożizzjonijiet," li kultant jista' jirriżulta f'dati mhux korretti. Jekk tagħti Temporal xi ħaġa invalida, din tarmi żball. Jekk il-kodiċi jibda, taf li għandek data valida. Il-mument jista 'jżid daqs sinifikanti mal-pakkett tal-applikazzjoni, partikolarment jekk qed tuża l-pakkett tal-mument-żona tal-ħin. Temporal ma jżid xejn (ladarba jintbagħat fil-browsers fil-mira tiegħek). L-immutabilità tagħtik il-kunfidenza li qatt ma titlef jew tissostitwixxi d-dejta meta twettaq konverżjonijiet u operazzjonijiet tad-data. Rappreżentazzjonijiet differenti tal-ħin (Instant, PlainDateTime, ZonedDateTime) skont ir-rekwiżiti tiegħek, fejn Moment huwa dejjem tgeżwir madwar timestamp UTC. Temporal juża l-APIs Intl għall-ifformattjar tad-data, li jfisser li jista 'jkollok ifformattjar konxju tal-lokal mingħajr ma jkollok tispeċifika b'mod espliċitu tokens.
Noti Fuq Il-Polyfill Kif issemma qabel, hemm Polyfill Temporal disponibbli, imqassam bħala pakkett npm bl-isem @js-temporal/polyfill. Jekk trid tuża Temporal illum, ikollok bżonn dan il-polyfill biex tappoġġja browsers bħal Safari li għadhom ma bagħtux l-API. L-aħbar ħażina ma 'dan hija li se żżid mad-daqs tal-pakkett tiegħek. L-aħbar tajba hija li xorta żżid b'mod sinifikanti inqas minn mument jew mument-timezone. Hawn hu paragun tad-daqsijiet tal-pakketti kif irrappurtat minn Bundlephobia.com, websajt li tippreżenta informazzjoni dwar id-daqsijiet tal-pakkett npm (ikklikkja fuq kull isem tal-pakkett biex tara l-analiżi tal-Bundlephobia):
Pakkett Minifikat Minifikat & gżipped @js-temporal/polyfill 154.1 kB 44.1 kB mument 294.4 kB 75.4 kB mument-żona tal-ħin 1 MB 114.2 kB
Il-polyfill storikament kellu wkoll xi kwistjonijiet ta 'prestazzjoni dwar l-użu tal-memorja, u fil-ħin tal-kitba, huwa meqjus bħala fi stat alfa. Minħabba dan, tista 'ma tridx tużaha fil-produzzjoni sakemm tilħaq stat aktar matur. L-aħbar tajba l-oħra hija li nisperaw li l-polyfill mhux se jkun meħtieġ ħafna aktar (sakemm ma jkollokx bżonn tappoġġja browsers anzjani, ovvjament). Fiż-żmien tal-kitba, Temporal ġie mibgħut fi Chrome, Edge, u Firefox. Għadu mhux lest għal kollox f'Safari, għalkemm jidher li huwa disponibbli b'bandiera runtime fuq l-aħħar Preview tat-Teknoloġija.