Kusan kowane nau'in aikace-aikacen da aka rubuta a cikin JavaScript yana aiki tare da lokuta ko kwanan wata a wasu iyakoki. A farkon, an iyakance wannan ga ginanniyar kwanan watan API. Wannan API ɗin ya haɗa da ayyuka na asali, amma yana da iyaka sosai a cikin abin da zai iya yi. Laburaren ɓangare na uku kamar Moment.js, kuma daga baya ginanniyar APIs kamar Intl APIs da sabon API na ɗan lokaci, suna ƙara ƙarin sassauci ga aiki tare da lokuta da kwanan wata. Tashi Da Faduwar Lokacin.js Moment.js babban ɗakin karatu ne na JavaScript tare da kayan aiki masu ƙarfi don aiki tare da lokuta da kwanan wata. Ya haɗa da abubuwan da suka ɓace daga ainihin Kwanan watan API, kamar sarrafa yankin lokaci, kuma yana sa yawancin ayyukan gama gari su zama masu sauƙi. Lokacin kuma ya haɗa da ayyuka don tsara ranaku da lokuta. Ya zama ɗakin karatu da aka yi amfani da shi sosai a aikace-aikace daban-daban. Koyaya, Moment shima yana da nasa rabon al'amura. Babban ɗakin karatu ne, kuma yana iya ƙara mahimmanci ga girman tarin aikace-aikacen. Saboda ɗakin karatu ba ya goyan bayan girgiza bishiyar (wani fasalin ɗimbin ɗaruruwan zamani waɗanda za su iya cire sassan ɗakunan karatu da ba a yi amfani da su ba), an haɗa duk ɗakin karatu na Lokacin ko da ɗaya ko biyu daga cikin ayyukansa kawai kuna amfani da shi. Wani batu tare da Moment shine gaskiyar cewa abubuwan da yake ƙirƙira suna canzawa. Kiran wasu ayyuka akan abu na lokaci yana da illa kuma yana canza darajar abin. Wannan na iya haifar da halayen da ba zato ba tsammani ko kwaro. A cikin 2020, masu kula da Moment sun yanke shawarar sanya ɗakin karatu cikin yanayin kulawa. Babu wani sabon haɓaka fasalin da ake yi, kuma masu kula da su suna ba da shawarar hana amfani da shi don sabbin ayyuka. Akwai wasu ɗakunan karatu na kwanan wata na JavaScript, kamar kwanan-fn, amma akwai sabon ɗan wasa a garin, API wanda aka gina kai tsaye cikin JavaScript: Temporal. Wani sabon ma'auni ne wanda ya cika ramuka na ainihin Kwanan watan API tare da magance wasu iyakokin da aka samu a Lokacin da sauran ɗakunan karatu. Mene Ne Na Lokaci? Temporal sabon lokaci ne da kwanan wata API da ake ƙarawa zuwa ma'aunin ECMAScript, wanda ke bayyana JavaScript na zamani. Tun daga Maris 20266, ya kai mataki na 4 na tsarin TC39 (kwamitin da ke kula da shawarwari da ƙari ga harshen JavaScript), kuma za a haɗa shi cikin sigar gaba na ƙayyadaddun ECMAScript. An riga an aiwatar da shi a cikin masu bincike da yawa: Chrome 144+ da Firefox 139+, tare da sa ran Safari zai biyo baya nan ba da jimawa ba. Hakanan ana samun polyfill don masu bincike mara tallafi da Node.js. API ɗin wucin gadi yana ƙirƙirar abubuwa waɗanda, gabaɗaya, ke wakiltar lokuta cikin lokaci. Waɗannan na iya zama tambarin cikakken lokaci da kwanan wata a cikin wani yanki na lokaci, ko kuma suna iya zama misalin lokaci na “agogon bango” ba tare da kowane yanki na lokaci ko bayanin kwanan wata ba. Wasu daga cikin manyan fasalulluka na Temporal sun haɗa da:
Lokuta tare da kwanan wata ko babu. Abu na wucin gadi na iya wakiltar takamaiman lokaci akan takamaiman kwanan wata, ko lokaci ba tare da wani bayanin kwanan wata ba. Ana iya wakilta takamaiman kwanan wata, ba tare da lokaci ba. Goyan bayan yankin lokaci.Abubuwa na wucin gadi suna sane da yankin lokaci kuma ana iya jujjuya su zuwa yankuna daban-daban. Lokaci yana goyan bayan yankunan lokaci, kuma, amma yana buƙatar ƙarin ɗakin karatu na lokaci-lokaci. Rashin canzawa.Da zarar an halicci abu na ɗan lokaci, ba za a iya canza shi ba. Juyin lissafin lokaci ko jujjuyawar yankin lokaci baya canza abin da ke ƙasa. Madadin haka, suna haifar da sabon abu na ɗan lokaci. Fihirisar tushen tushen 1. Tushen bugu na yau da kullun tare da Kwanan wata API (kamar kuma tare da Moment) shine cewa watanni ba su da ƙima. Wannan yana nufin cewa Janairu wata ne 0, maimakon watan 1 kamar yadda dukkanmu muka fahimta a zahiri. Na ɗan lokaci yana gyara wannan ta amfani da fihirisar tushen 1 - Janairu wata 1 ne. An gina shi a cikin burauzar.Tunda Temporal API ne a cikin masarrafar da kanta, ba ya ƙara komai zuwa girman dam ɗin aikace-aikacenku.
Hakanan yana da mahimmanci a lura cewa API ɗin Kwanan wata baya tafiya. Yayin da Temporal ya zarce wannan API, ba a cire shi ko soke shi ba. Yawancin aikace-aikace za su karye idan masu bincike ba zato ba tsammani sun cire kwanan watan API. Koyaya, kuma ku tuna cewa lokacin yanzu ana ɗaukar aikin gado a yanayin kulawa. A cikin sauran labarin, za mu kalli wasu “kayan girke-girke” don ƙaura lambar tushen lokaci zuwa sabon API na ɗan lokaci. Bari mu fara refactoring! Ƙirƙirar Abubuwan Kwanan Wata Da Lokaci Kafin mu iya sarrafa ranaku da lokuta, dole ne mu ƙirƙira abubuwan da ke wakiltar su. Don ƙirƙirar abu na lokaci mai wakiltar kwanan wata da lokaci na yanzu, yi amfani da aikin lokacin. const now = lokacin (); console.log (yanzu); // Lokacin <2026-02-18T21:26:29-05:00>
Ana iya tsara wannan abu ko sarrafa shi yadda ake buƙata.
Canza zuwa UTC //Gargadi: Wannan yana canza abin Lokacin kuma yana sanya shi cikin yanayin UTC! console.log (yanzu.utc()); // Lokacin <2026-02-19T02:26:29Z>
// buga igiyar da aka tsara - lura cewa yana amfani da lokacin UTC yanzu console.log (yanzu.tsara ('MM/DD/YYYY hh:mm:ss a')); // 02/19/2026 02:27:07 na safe
Babban abin da ya kamata a tuna game da Lokacin shine cewa wani abu koyaushe yana haɗa bayanai game da lokaci da kwanan wata. Idan kawai kuna buƙatar yin aiki tare da bayanan lokaci, wannan yawanci yana da kyau, amma yana iya haifar da halayen da ba zato ba tsammani a cikin yanayi kamar Lokacin Tsananin Rana ko shekarun tsalle, inda kwanan wata zai iya yin tasiri akan lissafin lokaci. Na ɗan lokaci ya fi sassauƙa. Kuna iya ƙirƙirar abu mai wakiltar kwanan wata da lokaci ta yanzu ta ƙirƙirar abu na ɗan lokaci. Nan take. Wannan yana wakiltar wani batu a cikin lokacin da aka ayyana ta lokacin tun "zamanin" (tsakar dare UTC ranar 1 ga Janairu, 1970). Na ɗan lokaci na iya yin la'akari da wannan nan take cikin lokaci tare da daidaitaccen matakin nanosecond. const now = Temporal.Now.instan ();
// duba danyan nanoseconds tun zamanin console.log (yanzu.epochNanoseconds); // 1771466342612000000n
// tsarin don UTC console.log (yanzu.toString()); // 2026-02-19T01:55:27.844Z
// tsari don wani yanki na musamman console.log (yanzu.toString ({timeZone: 'America/New_York'})); // 2026-02-18T20:56:57.905-05:00
Na ɗan lokaci. Hakanan ana iya ƙirƙira abubuwa nan take na takamaiman lokaci da kwanan wata ta amfani da hanyar tsaye.
const myInstant = Temporal.Instant.daga('2026-02-18T21:10:00-05:00');
// Tsara saurin a cikin yankin lokaci na gida. Lura cewa wannan kawai yana sarrafawa // Tsarin - ba ya canza abu kamar yadda moment.utc ke yi. console.log (myInstant.toString ({timeZone: 'America/New_York'})); // 2026-02-18T21:10:00-05:00
Hakanan zaka iya ƙirƙirar wasu nau'ikan abubuwa na ɗan lokaci, gami da:
Temporal.PlainDate: Kwanan wata da babu bayanin lokaci. Temporal.PlainTime: Lokaci ba tare da bayanin kwanan wata ba. Temporal.ZonedDateTime: Kwanan wata da lokaci a takamaiman yanki na lokaci.
Kowanne daga cikin waɗannan yana da hanyar da za a iya kira tare da wani abu mai ƙayyadaddun kwanan wata da/ko lokaci, ko kirtan kwanan wata don tantancewa. // Kwanan wata kawai const today = Temporal.PlainDate.daga({ shekara: 2026, wata: 2, // lura muna amfani da 2 ga Fabrairu rana: 18 }); console.log (yau.toString ()); // 2026-02-18
// Lokaci kawai cin abincin rana = Temporal.PlainTime.daga({ awa: 12 }); console.log( lunchTime.toString()); // 12:00:00
// Kwanan wata da lokaci a yankin lokacin Gabashin Amurka const dueAt = Temporal.ZonedDateTime.daga({ TimeZone: 'Amurka/New_York', shekara: 2026, wata: 3, rana: 1, awa: 12, minti: 0, biyu: 0 }); console.log (dueAt.toString ()); // 2026-03-01T12:00:00-05:00[Amurka/New_York]
Yin nazari Mun rufe tsarin ƙirƙira bayanan kwanan wata da lokaci. Yanzu bari mu dubi parsing. Fassara yanki ɗaya ne inda Lokacin ya fi sassauƙa fiye da ginannen Temporal API. Kuna iya rarraba kirtani ta kwanan wata ta wuce shi zuwa aikin lokacin. Tare da hujja guda ɗaya, Moment yana tsammanin kirtani kwanan wata na ISO, amma zaka iya amfani da madadin tsarin idan kun samar da hujja ta biyu da ke ƙayyade tsarin kwanan wata.
const isoDate = lokacin ('2026-02-21T09:00:00'); const tsara Kwanan wata = lokacin ('2/21/26 9:00:00', 'M/D/YY h:mm:ss');
console.log (isoDate); // Lokacin <2026-02-21T09:00:00-05:00>
console.log (wanda aka tsara kwanan wata); // Lokacin <2026-02-21T09:00:00-05:00>
A cikin tsoffin juzu'ai, Moment zai yi kyakkyawan zato don tantance kowane kirtani kwanan wata da aka tsara bisa ga ka'ida. Wannan zai iya haifar da sakamako maras tabbas. Misali, shine 02-03-2026 Fabrairu 2 ko Maris 3? Don wannan dalili, sabbin nau'ikan Lokacin suna nuna sanannen gargaɗin yanke hukunci idan an kira shi ba tare da sigar kwanan wata da aka tsara ta ISO ba (sai dai idan an bayar da hujja ta biyu tare da tsarin da ake so). Na ɗan lokaci kawai zai rarraba takamaiman kirtani kwanan wata. Dole ne kirtani ta kasance mai dacewa da tsarin ISO 8601 ko tsawaita shi, RFC 9557. Idan igiyar kwanan wata da ba ta dace ba ta wuce hanyar daga hanya, Temporal zai jefa RangeError.
// Yin amfani da igiyar kwanan wata RFC 9557 const myDate = Temporal.Instant.daga ('2026-02-21T09:00:00-05:00[Amurka/New_York]'); console.log (myDate.toString ({timeZone: 'America/New_York'})); // 2026-02-21T09:00:00-05:00
// Yin amfani da igiyar kwanan wata da ba a sani ba const otherDate = Temporal.Instant.daga('2/21/26 9:00:00'); // Kuskuren Range: Kuskuren ɗan lokaci: Hali mara inganci yayin da ake tantance ƙimar shekara.
Madaidaicin buƙatun kirtani kwanan wata sun dogara da irin nau'in abu na ɗan lokaci da kuke ƙirƙira. A cikin misalin da ke sama, Temporal.Instant yana buƙatar cikakken ISO8601 ko RFC 9557 kirtani kwanan wata da ke ƙayyadaddun kwanan wata da lokaci tare da daidaita yankin lokaci, amma kuma kuna iya ƙirƙirar abubuwan PlainDate ko PlainTime ta amfani da juzu'in tsarin kwanan wata. const myDate = Temporal.PlainDate.daga('2026-02-21'); console.log (myDate.toString ()); // 2026-02-21
const myTime = Temporal.PlainTime.daga('09:00:00'); console.log (myTime.toString ()); // 09:00:00
Lura cewa waɗannan igiyoyin dole ne su bi tsarin da ake tsammani, ko za a jefa kuskure.
// Yin amfani da igiyoyin lokaci mara dacewa. Waɗannan duka za su jefa RangeError. Temporal.PlainTime.daga('9:00'); Temporal.PlainTime.daga('9:00:00 AM');
Pro tip: Yin amfani da igiyoyin da ba na ISO ba, saboda na ɗan lokaci yana ba da fifikon dogaro, ba zai yi ƙoƙarin yin hasashen tsarin kirtani kamar 02-01-2026 ba. Idan tushen bayanan ku yana amfani da irin waɗannan kirtani, kuna buƙatar yin wasu magudin kirtani don sake tsara dabi'u cikin kirtani na ISO kamar 2026-02-01 kafin yunƙurin amfani da shi tare da Temporal.
Tsarin tsari Da zarar kuna da wani lokaci ko abu na ɗan lokaci, ƙila za ku so ku canza shi zuwa sigar da aka tsara a wani lokaci. Wannan misali ne inda Moment ya ɗan ɗanɗana kaɗan. Kuna kiran hanyar tsarin abu tare da jerin alamun da ke bayyana tsarin kwanan wata da ake so. kwanan wata = lokacin ();
console.log (tsarin kwanan wata ('MM/DD/YYYY')); // 02/22/2026
console.log(tsarin kwanan wata ('MMMM Do YYYY, h:mm:ss a')); // Fabrairu 22, 2026, 8:18:30 na dare
A gefe guda, Temporal yana buƙatar ku zama ɗan karin magana. Abubuwa na ɗan lokaci, kamar Instant, suna da hanyar zuwaLocaleString wanda ke karɓar zaɓuɓɓukan tsarawa daban-daban da aka ƙayyade azaman kaddarorin abu.
kwanan wata = Temporal.Now.instan ();
// ba tare da gardama ba, za mu sami tsarin tsoho don wurin na yanzu console.log (date.toLocaleString()); // 2/22/2026, 8:23:36 PM (zaton yankin en-US)
// zažužžukan tsarawa don samar da sigar tsari na al'ada console.log (date.toLocaleString ('en-US', { wata: 'dogon', rana: 'lambobi', shekara: 'lambobi', hour: '2-lambobi', minti: '2 lambobi' })); // Fabrairu 22, 2026 a 8:23 PM
// kawai wuce filayen da kuke so a cikin sigar tsarin console.log (date.toLocaleString ('en-US', { wata: 'gajere', rana: 'lambobi' })); // Fabrairu 22
Tsara kwanan wata a haƙiƙa yana amfani da Intl.DateTimeFormat API (wanda aka rigaya samuwa a cikin masu bincike na zamani) a ƙarƙashin murfin. Wannan yana nufin zaku iya ƙirƙirar abu mai sake amfani da DateTimeFormat tare da zaɓuɓɓukan tsarawa na al'ada, sannan ku wuce abubuwan ɗan lokaci zuwa hanyar tsarin sa. Saboda wannan, baya goyan bayan tsarin kwanan wata na al'ada kamar Moment yayi. Idan kuna buƙatar wani abu kamar 'Q1 2026' ko wani tsari na musamman, kuna iya buƙatar lambar tsara kwanan wata ta al'ada ko isa ga ɗakin karatu na ɓangare na uku. const formatter = sabon Intl.DateTimeFormat ('en-US', { wata: '2-lambobi', rana: '2-lambobi', shekara: 'lambobi' });
kwanan wata = Temporal.Now.instan (); console.log (formatter.format (kwanan wata)); // 02/22/2026
Alamomin tsara lokaci sun fi sauƙi don rubutawa, amma ba su da abokantaka. Tsarin kirtani "hard code" abubuwa kamar tsari na wata/rana. Fa'idar yin amfani da abin daidaitawa, kamar yadda Temporal yake yi, shine zai daidaita ta atomatik zuwa kowane yanki da aka bayar kuma yayi amfani da tsarin da ya dace. kwanan wata = Temporal.Now.instan ();
const formatOptions = { wata: 'lambobi', rana: 'lambobi', shekara: 'lambobi' };
console.log(date.toLocaleString('en-US', formatOptions)); // 2/22/2026
console.log(date.toLocaleString('en-GB', formatOptions)); // 22/02/2026
Lissafin kwanan wata A cikin aikace-aikace da yawa, kuna buƙatar ƙarasa yin wasu ƙididdiga akan kwanan wata. Kuna iya ƙara ko rage raka'a na lokaci (kwanaki, sa'o'i, daƙiƙa, da sauransu). Misali, idan kuna da kwanan wata, kuna iya nuna wa mai amfani kwanan wata mako 1 daga yanzu. Abubuwan lokaci suna da hanyoyi kamar ƙarawa da ragi waɗanda ke yin waɗannan ayyukan. Waɗannan ayyuka suna ɗaukar ƙima da raka'a, misali: ƙara(7, 'kwanaki'). Bambanci ɗaya mai mahimmanci tsakanin Moment da Temporal, duk da haka, shine lokacin yin waɗannan ƙididdiga na kwanan wata, abin da ke ciki yana canzawa kuma ana rasa ainihin ƙimarsa. const now = lokacin ();
console.log (yanzu); // Lokacin <2026-02-24T20:08:36-05:00>
const nextWeek = now.ƙara (7, 'kwanaki'); console.log (Mako mai zuwa); // Lokacin <2026-03-03T20:08:36-05:00>
// Gotcha - ainihin abu ya canza console.log (yanzu); // Lokacin <2026-03-03T20:08:36-05:00>
Don guje wa asarar asalin kwanan wata, zaku iya kiran clone akan abin Lokacin don ƙirƙirar kwafi. const yanzu= lokaci (); const nextWeek = now.clone ().kara (7, 'kwanaki');
console.log (yanzu); // Lokacin <2026-02-24T20:12:55-05:00>
console.log (Mako mai zuwa); // Lokacin <2026-03-03T20:12:55-05:00>
A gefe guda, abubuwa na ɗan lokaci ba su canzawa. Da zarar kun ƙirƙiri wani abu kamar Instant, PlainDate, da sauransu, ƙimar abin ba zai taɓa canzawa ba. Abubuwa na ɗan lokaci kuma suna da hanyoyin ƙara da ragi. Na ɗan lokaci yana ɗan zaɓe game da waɗanne raka'o'in lokaci ne za'a iya ƙara waɗanne nau'ikan abu. Misali, ba za ku iya ƙara kwanaki zuwa Nan take ba:
const now = Temporal.Now.instan (); const nextWeek = now.ƙara ({kwanaki: 7}); // Kuskuren Range: Kuskuren ɗan lokaci: Babban naúrar ba zai iya zama naúrar kwanan wata ba
Wannan saboda abubuwa kai tsaye suna wakiltar takamaiman lokaci a cikin UTC kuma suna kalanda-agnostic. Saboda tsayin yini na iya canzawa dangane da ƙa'idodin yankin lokaci kamar Lokacin Ajiye Hasken Rana, ba a samun wannan lissafin nan take. Kuna iya, duk da haka, yin wannan aikin akan wasu nau'ikan abubuwa, kamar PlainDateTime: const now = Temporal.Now.plainDateTimeISO(); console.log (yanzu.toLocaleString()); // 2/24/2026, 8:23:59 PM
const nextWeek = now.ƙara ({kwanaki: 7});
// Lura cewa ainihin PlainDateTime bai canza ba console.log (yanzu.toLocaleString()); // 2/24/2026, 8:23:59 PM
console.log(mako mai zuwa.toLocaleString()); // 3/3/2026, 8:23:59 PM
Hakanan zaka iya ƙididdige adadin lokacin tsakanin abubuwa biyu na Moment ko na ɗan lokaci. Tare da aikin bambance-bambancen Moment, kuna buƙatar samar da naúrar don granularity, in ba haka ba zai dawo da bambanci a cikin millise seconds. kwanan wata1 = lokacin ('2026-02-21T09:00:00'); const date2 = lokacin ('2026-02-22T10:30:00');
console.log (kwanan wata2.diff (kwana ta 1)); // 91800000
console.log (kwanan wata2.diff (kwanaki 1, 'kwanaki')); // 1
Don yin wannan tare da abu na ɗan lokaci, zaku iya wuce wani abu na ɗan lokaci zuwa gare shi har sai ko tun daga hanyoyin. Wannan yana dawo da wani abu na ɗan lokaci.Tsarin lokaci mai ɗauke da bayani game da bambancin lokaci. Abu na tsawon lokaci yana da kaddarorin ga kowane ɓangaren bambance-bambancen, kuma yana iya haifar da kirtani na tsawon lokaci na ISO 8601 wanda ke wakiltar bambancin lokaci.
const date1 = Temporal.PlainDateTime.daga('2026-02-21T09:00:00'); const date2 = Temporal.PlainDateTime.daga('2026-02-22T10:30:00');
// mostUnit yana ƙayyade mafi girman juzu'in lokacin wakilci // a cikin lissafin tsawon lokaci const diff = date2.tun (kwanan wata1, {mafi girmaUnit: 'day'});
console.log (diff.days); // 1
console.log (sa'o'i daban-daban); // 1
console.log (diff.minutes); // 30
console.log (diff.toString ()); // P1DT1H30M // (ISO 8601 Tsawon lokaci: kwana 1, awa 1, mintuna 30)
Kwatanta Kwanaki Da Lokaci Lokaci da na ɗan lokaci duka suna ba ku damar kwatanta ranaku da lokuta don tantance wanda ke zuwa gaban ɗayan, amma ɗauki hanyoyi daban-daban tare da API. Lokacin yana ba da hanyoyi kamar isBefore, isBater, da isSame don kwatanta abubuwa biyu na Lokacin. kwanan wata1 = lokacin ('2026-02-21T09:00:00'); const date2 = lokacin ('2026-02-22T10:30:00');
console.log (date1.isBefore (kwana ta 2)); // gaskiya
Temporal yana amfani da hanyar kwatanta a tsaye don yin kwatanta tsakanin abubuwa biyu masu nau'in iri ɗaya. Yana dawowa -1 idan kwanan wata ta zo kafin ta biyu, 0 idan sun kasance daidai, ko 1 idan kwanan wata ta zo bayan ta biyu. Misali mai zuwa yana nuna yadda ake kwatanta abubuwa biyu na PlainDate. Dukansu mahawara ga Temporal.PlainDate.compare dole ne su kasance abubuwan PlainDate.
const date1 = Temporal.PlainDate.daga ({shekara: 2026, wata: 2, rana: 24}); const date2 = Temporal.PlainDate.daga ({shekara: 2026, wata: 3, rana: 24});
// date1 ya zo kafin kwanan wata2, don haka -1 console.log (Temporal.PlainDate.compare (kwanan wata 1, kwanan wata2));
// Kuskure idan muka yi ƙoƙarin kwatanta abubuwa biyu iri daban-daban console.log (Temporal.PlainDate.compare (kwanaki1, Temporal.Now.instant())); // Kuskure Nau'in: Kuskuren ɗan lokaci: An bayar da filayen PlainDate mara inganci.
Musamman, wannan yana sauƙaƙa rarrabuwar jeri na abubuwa na wucin gadi bisa tsarin lokaci. // Tsare-tsare na abubuwan Temporal.PlainDate kwanan wata = [...];
// yi amfani da Temporal.PlainDate.compare azaman aikin kwatancen dates.sort (Temporal.PlainDate.compare);
Juyin Juya Lokaci Babban ɗakin karatu na Lokacin ba ya goyan bayan sauya yankin lokaci. Idan kuna buƙatar wannan aikin, kuna buƙatar shigar da fakitin lokaci-lokaci. Wannan fakitin ba itace mai girgizawa ba, saboda haka yana iya ƙara mahimmanci ga girman tarin ku. Da zarar kun shigar da yanki na lokaci-lokaci, zaku iya canza abubuwan Lokacin zuwa yankuna daban-daban tare da hanyar tz. Kamar yadda yake tare da sauran ayyukan Moment, wannan yana canza abin da ke cikiabu. // Daukacin lokacin Gabashin Amurka const now = lokacin (); console.log (yanzu); // Lokacin <2026-02-28T20:08:20-05:00>
// Canza zuwa lokacin Pacific. // Asalin lokacin Gabas ya ɓace. now.tz ('Amurka/Los_Angeles'); console.log (yanzu); // Lokacin <2026-02-28T17:08:20-08:00>
An gina aikin yankin lokaci a cikin API na ɗan lokaci lokacin amfani da abu na Temporal.ZonedDateTime. Waɗannan abubuwa sun haɗa da hanyarTimeZone tare da dawo da sabon ZonedDateTime mai wakiltar lokaci guda a cikin lokaci, amma a ƙayyadadden yankin lokaci. // Bugu da ƙari, ɗaukan lokacin Gabashin Amurka const now = Temporal.Now.zonedDateTimeISO(); console.log (yanzu.toLocaleString()); // 2/28/2026, 8:12:02 PM EST
// Canza zuwa lokacin Pacific const nowPacific = now.withTimeZone('Amurka/Los_Angeles'); console.log (yanzuPacific.toLocaleString()); // 2/28/2026, 5:12:02 PM PST
// Abu na asali ya kasance baya canzawa console.log (yanzu.toLocaleString()); // 2/28/2026, 8:12:02 PM EST
Lura: Ƙimar da aka tsara ta zuwaLocaleString, kamar yadda sunan ke nunawa, sun dogara da yanki. An ƙirƙiri lambar samfurin a cikin yankin en-US, don haka tsarin ya kasance kamar haka: 2/28/2026, 5:12:02 PM PST. A wani wurin, wannan na iya bambanta. Misali, a cikin en-GB, zaku sami wani abu kamar 28/2/2026, 17:12:02 GMT-8. A Real-duniya Refactoring A ce muna gina app don tsara abubuwan da ke faruwa a cikin yankunan lokaci. Wani ɓangare na wannan ƙa'idar aiki ne, getEventTimes, wanda ke ɗaukar kirtani ISO 8601 wanda ke wakiltar lokaci da kwanan watan taron, yankin lokaci na gida, da yankin lokaci mai niyya. Ayyukan yana ƙirƙira tsararrun lokaci da kirtani na kwanan wata don taron a cikin yankunan lokaci biyu. Idan aikin an ba da kirtani shigarwa wanda ba daidaitaccen lokaci/ kwanan wata ba, zai jefa kuskure. Anan ga ainihin aiwatarwa, ta amfani da Lokacin (kuma yana buƙatar amfani da fakitin lokaci-lokaci).
shigo da lokacin daga 'yankin lokaci-lokaci';
aiki getEventTimes (inputString, userTimeZone, targetTimeZone) { const timeFormat = 'MMM D, YYYY, h:mm:ss a z';
// 1. Ƙirƙiri lokacin farko a yankin lokaci na mai amfani const eventTime = moment.tz( shigar da igiyoyi, moment.ISO_8601, // Yi tsammanin zaren ISO 8601 gaskiya, // Tsananin yin nazari mai amfaniTimeZone );
// Jefa kuskure idan shigarwaString bai wakiltar kwanan wata mai aiki ba idan (! EventTime.isValid()) { jefa sabon Kuskure ('Shigarwar kwanan wata/lokaci mara inganci'); }
// 2. Ƙididdige lokacin manufa // M: Dole ne mu clone, ko 'eventTime' ya canza har abada! const targetTime = eventTime.clone() .tz(targetTimeZone);
dawo { local: eventTime.format(timeFormat), manufa: targetTime.format(timeFormat), }; }
tsarin lokaci = getEventTimes ( '2026-03-05T15:00-05:00', 'Amurka/New_York', 'Turai/London', );
console.log (jadawali.local); // Maris 5, 2026, 3:00:00 na yamma EST
console.log (jadawali.target); // Maris 5, 2026, 8:00:00 na yamma agogon GMT
A cikin wannan misalin, muna amfani da tsarin kwanan wata da ake tsammani na ISO 8601, wanda aka gina da taimako cikin Lokacin. Har ila yau, muna amfani da tsattsauran ra'ayi, wanda ke nufin Lokaci ba zai yi ƙoƙari ya yi la'akari da kirtani kwanan wata da ba ta dace da tsarin ba. Idan aka wuce kirtani kwanan wata da ba ta ISO ba, zai haifar da abin kwanan wata mara inganci, kuma muna jefa kuskure. Aiwatar da ɗan lokaci yayi kama da kama, amma yana da ƴan bambance-bambancen maɓalli.
aiki getEventTimes (inputString, userTimeZone, targetTimeZone) { // 1. Sanya shigarwar kai tsaye zuwa cikin Instant, sannan ƙirƙirar // a ZonedDateTime a yankin mai amfani. const nan take = Temporal.Instant.daga(inputString); const eventTime = instant.toZonedDateTimeISO(mai amfaniTimeZone);
// 2. Juya zuwa yankin da aka yi niyya // Wannan yana mayar da sabon abu kai tsaye; 'eventTime' yana da lafiya. const targetTime = eventTime.withTimeZone(targetTimeZone);
// 3. Tsara ta amfani da Intl (gina-ciki) zabin const = { shekara: 'lambobi', wata: 'gajere', rana: 'lambobi', hour: 'lambobi', minti: '2-lambobi', na biyu: '2-lambobi', timeZoneName: 'gajere' };
dawo { local: eventTime.toLocaleString(navigator.language, zažužžukan), manufa: targetTime.toLocaleString(navigator.language, zažužžukan) }; }
tsarin lokaci = getEventTimes ( '2026-03-05T15:00-05:00', 'Amurka/New_York', 'Turai/London', );
console.log (jadawali.local); // Maris 5, 2026, 3:00:00 PM EST
console.log (jadawali.target); // Maris 5, 2026, 8:00:00 PM GMT
Tare da Moment, dole ne mu ƙididdige kirtani a sarari don igiyoyin kwanan wata. Ba tare da la'akari da wurin mai amfani ko wurin ba, lokutan taron koyaushe za a tsara su azaman Maris 5, 2026, 3:00:00pm EST. Har ila yau, ba dole ba ne mu yi jifa a sarari. Idan an wuce kirtani mara inganci zuwa Temporal.Instant.daga, Temporal zai jefa mana keɓantacce. Abu daya da za a lura shi ne cewa ko da tare da tsattsauran ra'ayi, sigar Moment har yanzu tana da sassauci. Na ɗan lokaci yana buƙatar daidaita yankin lokaci a ƙarshen kirtani. Hakanan ya kamata ku lura cewa tunda muna amfani da navigator.language, wannan lambar za ta yi aiki ne kawai a cikin mahallin burauza, kamar yadda ba a ayyana navigator a cikin mahallin Node.js. Aiwatar da ɗan lokaci yana amfani da wurin mai bincike na yanzu (navigator.language), don haka mai amfani zai sami tsara lokutan aukuwa ta atomatik a cikin tsarin lokaci na gida. A cikin yankin en-US, wannan shine Maris 5, 2026, 3:00:00 na yamma EST. Koyaya, idan mai amfani yana London, alal misali, lokutan taron za a tsara su azaman 5 Maris 2026, 15:00:00 GMT-5. Takaitawa
Aiki Lokacin.js Na ɗan lokaci Lokaci na yanzu lokaci() Temporal.Yanzu.zonedDateTimeISO() Binciken ISO lokaci (str) Na ɗan lokaci. Nan take.daga (str) Ƙara lokaci .ƙara (7, 'kwanaki') (mutates) .ƙara ({kwanaki: 7}) (sabon abu) Bambanci .diff(wasu, 'awa'o'i') .tun (sauran).hours Yankin lokaci .tz ('Zone/Sunan') .tare da TimeZone ('Zone/Sunan')
A kallo na farko, bambancin zai iya zama ɗan bambanta (kuma a cikin yanayin Temporal, wani lokacin karin magana kuma mafi tsauri) daidaitawa, amma akwai fa'idodi da yawa don amfani da Temporal akan Moment.js:
Kasancewa a bayyane yana nufin ƴan abubuwan ban mamaki da kurakuran da ba a yi niyya ba. Lokaci na iya zama kamar ya fi sassauci, amma ya ƙunshi "aiki," wanda wani lokaci yakan haifar da kwanakin da ba daidai ba. Idan kun ba Temporal wani abu mara inganci, yana jefa kuskure. Idan lambar tana aiki, kun san kuna da ingantaccen kwanan wata. Lokaci na iya ƙara girma mai mahimmanci ga tarin aikace-aikacen, musamman idan kuna amfani da fakitin lokaci-lokaci. Temporal ba ya ƙara kome (da zarar an aika shi a cikin masu binciken da kuke so). Rashin canzawa yana ba ku kwarin gwiwa cewa ba za ku taɓa yin asara ko sake rubuta bayanai ba yayin yin jujjuyawar kwanan wata da aiki. Wakilai daban-daban na lokaci (Nan take, PlainDateTime, ZonedDateTime) ya danganta da buƙatun ku, inda Lokaci koyaushe shine nade a kusa da tambarin lokutan UTC. Temporal yana amfani da APIs na Intl don tsara kwanan wata, wanda ke nufin za ku iya yin tsarin sane da gida ba tare da ƙayyadadden alamu ba.
Bayanan kula akan Polyfill Kamar yadda aka ambata a baya, akwai tarin polyfill na ɗan lokaci, wanda aka rarraba azaman fakitin npm mai suna @js-temporal/polyfill. Idan kuna son amfani da Temporal a yau, kuna buƙatar wannan polyfill don tallafawa masu bincike kamar Safari waɗanda ba su tura API ɗin tukuna ba. Labari mara kyau tare da wannan shine cewa zai ƙara girman tarin ku. Labari mai dadi shine har yanzu yana ƙara ƙasa da lokaci ko yanki na lokaci-lokaci. Anan ne kwatancen nau'ikan masu girma dabam kamar yadda Bundlephobia.com ya ruwaito, gidan yanar gizon da ke gabatar da bayanai akan girman fakitin npm (danna kowane sunan fakiti don ganin binciken Bundlephobia):
Kunshin Rage Ragewa & gzipped @js-lokaci/polyfill 154.1 kB 44.1 kB lokacin 294.4 kB 75.4 kB lokaci-lokaci 1 MB 114.2 kB
Har ila yau, polyfill ɗin yana da wasu al'amurran da suka shafi aiki game da amfani da ƙwaƙwalwar ajiya, kuma a lokacin rubutawa, ana ɗaukarsa a cikin yanayin alpha. Saboda wannan, ƙila ba za ku so ku yi amfani da shi a samarwa ba har sai ya kai matsayi mafi girma. Wani labari mai dadi shine da fatan ba za a buƙaci polyfill da yawa ba (sai dai idan kuna buƙatar tallafawa tsofaffin masu bincike, ba shakka). A lokacin rubuce-rubuce, Temporal ya shigo cikin Chrome, Edge, da Firefox. Ba a shirya sosai ba tukuna a cikin Safari, kodayake yana kama da yana samuwa tare da tutar lokacin aiki akan Sabon Fasahar Fasaha.