Halos bisan unsang klase sa aplikasyon nga gisulat sa JavaScript magamit sa mga oras o petsa sa pila ka kapasidad. Sa sinugdanan, kini limitado sa built-in nga Date API. Kini nga API naglakip sa batakang pagpaandar, apan medyo limitado sa mahimo niini. Ang mga librarya sa ikatulo nga partido sama sa Moment.js, ug sa ulahi nga mga built-in nga API sama sa mga Intl API ug ang bag-ong Temporal nga API, nagdugang labi ka labi nga kadali sa pagtrabaho sa mga oras ug petsa. Ang Pagsaka ug Pagkahulog sa Kalit.js Ang Moment.js usa ka librarya sa JavaScript nga adunay kusog nga mga gamit alang sa pagtrabaho sa mga oras ug petsa. Naglakip kini sa nawala nga mga bahin gikan sa batakang Date API, sama sa pagmaniobra sa time zone, ug naghimo sa daghang kasagarang mga operasyon nga mas simple. Ang gutlo naglakip usab sa mga gimbuhaton alang sa pag-format sa mga petsa ug oras. Kini nahimong kaylap nga gigamit nga librarya sa daghang lain-laing mga aplikasyon. Bisan pa, ang Moment adunay bahin usab sa mga isyu. Kini usa ka dako nga librarya, ug makadugang pag-ayo sa gidak-on sa bundle sa aplikasyon. Tungod kay ang librarya wala nagsuporta sa pag-uyog sa kahoy (usa ka bahin sa modernong mga bundler nga makatangtang sa wala magamit nga mga bahin sa mga librarya), ang tibuok Moment librarya gilakip bisan kung mogamit ka lang sa usa o duha sa mga gimbuhaton niini. Ang laing isyu sa Moment mao ang kamatuoran nga ang mga butang nga gimugna niini mausab. Ang pagtawag sa pipila ka mga gimbuhaton sa usa ka butang nga Moment adunay mga epekto ug nag-mutate sa kantidad sa kana nga butang. Kini mahimong mosangpot sa wala damha nga kinaiya o mga bug. Sa 2020, ang mga tigmentinar sa Moment nakahukom nga ibutang ang library sa maintenance mode. Wala’y gihimo nga bag-ong pag-uswag sa bahin, ug girekomenda sa mga tigmentinar ang paggamit niini alang sa mga bag-ong proyekto. Adunay uban pang mga librarya sa petsa sa JavaScript, sama sa date-fns, apan adunay bag-ong magdudula sa lungsod, usa ka API nga direkta nga gitukod sa JavaScript: Temporal. Kini usa ka bag-ong sumbanan nga nagpuno sa mga lungag sa orihinal nga Date API ingon usab nagsulbad sa pipila nga mga limitasyon nga makita sa Moment ug uban pang mga librarya. Unsa ang Temporal? Ang Temporal usa ka bag-ong oras ug petsa nga API nga gidugang sa ECMAScript nga sumbanan, nga naghubit sa modernong JavaScript. Sukad sa Marso 20266, niabot na kini sa Stage 4 sa proseso sa TC39 (ang komite nga nagdumala sa mga sugyot ug mga pagdugang sa JavaScript nga pinulongan), ug ilakip sa sunod nga bersyon sa ECMAScript nga detalye. Gipatuman na kini sa daghang mga browser: Chrome 144+ ug Firefox 139+, uban sa Safari gilauman nga mosunod sa dili madugay. Ang usa ka polyfill magamit usab alang sa dili suportadong mga browser ug Node.js. Ang Temporal API nagmugna og mga butang nga, kasagaran, nagrepresentar sa mga gutlo sa panahon. Mahimo kini nga mga full-time ug petsa nga mga selyo sa usa ka gihatag nga time zone, o mahimo silang usa ka generic nga pananglitan sa oras sa "wall clock" nga wala’y bisan unsang time zone o impormasyon sa petsa. Ang pipila sa mga nag-unang bahin sa Temporal naglakip sa:
Ang mga panahon nga adunay mga petsa o wala. Ang usa ka Temporal nga butang mahimong magrepresentar sa usa ka piho nga oras sa usa ka piho nga petsa, o usa ka oras nga wala’y kasayuran sa petsa. Ang usa ka piho nga petsa, nga wala’y oras, mahimo usab nga irepresentar. Suporta sa time zone. Ang mga temporal nga butang hingpit nga nahibal-an sa time zone ug mahimong mabag-o sa lainlaing mga time zone. Gisuportahan usab sa Moment ang mga time zone, apan nanginahanglan kini dugang nga library sa time-time zone. Pagkadili-mabag-o. Sa higayon nga ang usa ka Temporal nga butang nahimo, kini dili mausab. Ang time arithmetic o time zone nga mga pagkakabig dili makausab sa nagpahiping butang. Hinuon, nagmugna sila usa ka bag-ong butang nga Temporal. 1-based indexing.Usa ka komon nga tinubdan sa mga bug sa Date API (ingon man sa Moment) kay ang mga bulan kay zero-indexed. Kini nagpasabot nga ang Enero mao ang bulan 0, imbes nga bulan 1 sama sa atong masabtan sa tinuod nga kinabuhi. Ang temporaryo nga pag-ayo niini pinaagi sa paggamit sa 1-based indexing — Enero mao ang bulan 1. Gitukod kini sa browser. Tungod kay ang Temporal usa ka API sa browser mismo, wala kini gidugang sa gidak-on sa bundle sa imong aplikasyon.
Importante usab nga timan-an nga ang Date API dili mawala. Samtang gipulihan sa Temporal kini nga API, wala kini gitangtang o wala gamita. Daghang mga aplikasyon ang maguba kung ang mga browser kalit nga tangtangon ang Date API. Bisan pa, hinumdomi usab nga ang Moment karon giisip nga usa ka legacy nga proyekto sa mode sa pagpadayon. Sa nahabilin nga artikulo, atong tan-awon ang pipila ka "mga resipe" alang sa pagbalhin sa code nga nakabase sa Moment sa bag-ong Temporal API. Magsugod ta sa pag-refactor! Paghimo sa Petsa Ug Oras nga mga Butang Sa dili pa nato mamanipula ang mga petsa ug oras, kinahanglang maghimo kita ug mga butang nga nagrepresentar niini. Aron makahimo ug Moment nga butang nga nagrepresentar sa kasamtangang petsa ug oras, gamita ang function sa moment. const karon = moment(); console.log(karon); // Sandali<2026-02-18T21:26:29-05:00>
Kini nga butang mahimo nang ma-format o mamanipula kung gikinahanglan.
// convert sa UTC //pasidaan: Kini mutates sa Moment butang ug gibutang kini sa UTC mode! console.log(karon.utc()); // Higayon<2026-02-19T02:26:29Z>
// pag-imprenta og gi-format nga string - timan-i nga kini naggamit sa oras sa UTC karon console.log(now.format('MM/DD/YYYY hh:mm:ss a')); // 02/19/2026 02:27:07 am
Ang importante nga butang nga hinumduman mahitungod sa Moment mao nga ang usa ka Moment nga butang kanunay naglakip sa impormasyon mahitungod sa oras ug sa petsa. Kung kinahanglan nimo nga magtrabaho uban ang impormasyon sa oras, kasagaran kini maayo, apan mahimo kini nga hinungdan sa wala damha nga pamatasan sa mga sitwasyon sama sa Daylight Saving Time o leap year, diin ang petsa mahimong adunay epekto sa mga kalkulasyon sa oras. Ang temporal mas flexible. Makahimo ka og butang nga nagrepresentar sa kasamtangang petsa ug oras pinaagi sa paghimo og Temporal.Instant nga butang. Kini nagrepresentar sa usa ka punto sa panahon nga gihubit sa panahon sukad sa "panahon" (tungang gabii UTC sa Enero 1, 1970). Ang temporal mahimong maghisgot niini dayon sa oras nga adunay katukma nga lebel sa nanosecond. const karon = Temporal.Now.instant();
// tan-awa ang hilaw nga nanosecond sukad sa panahon console.log(now.epochNanoseconds); // 1771466342612000000n
// format para sa UTC console.log(karon.toString()); // 2026-02-19T01:55:27.844Z
// format para sa usa ka partikular nga time zone console.log(now.toString({timeZone: 'America/New_York' })); // 2026-02-18T20:56:57.905-05:00
Temporal.Instant nga mga butang mahimo usab nga buhaton alang sa usa ka piho nga oras ug petsa pinaagi sa paggamit sa gikan sa static nga pamaagi.
const myInstant = Temporal.Instant.from('2026-02-18T21:10:00-05:00');
// I-format ang instant sa lokal nga time zone. Timan-i nga kini lamang ang nagkontrol // ang pag-format - dili kini mutate sa butang sama sa gibuhat sa moment.utc. console.log(myInstant.toString({timeZone: 'America/New_York' })); // 2026-02-18T21:10:00-05:00
Makahimo ka usab og ubang mga matang sa Temporal nga mga butang, lakip ang:
Temporal.PlainDate: Usa ka petsa nga walay impormasyon sa oras. Temporal.PlainTime: Usa ka panahon nga walay impormasyon sa petsa. Temporal.ZonedDateTime: Usa ka petsa ug oras sa usa ka piho nga time zone.
Ang matag usa niini adunay gikan sa pamaagi nga mahimong tawgon sa usa ka butang nga nagtino sa petsa ug/o oras, o usa ka string sa petsa aron ma-parse. // Date ra const karon = Temporal.PlainDate.from({ tuig: 2026, bulan: 2, // nota nga among gigamit ang 2 para sa Pebrero adlaw: 18 }); console.log(karon.toString()); // 2026-02-18
// Kadiyot lang const lunchTime = Temporal.PlainTime.from({ oras: 12 }); console.log(paniudto.toString()); // 12:00:00
// Usa ka petsa ug oras sa US Eastern time zone const dueAt = Temporal.ZonedDateTime.from({ timeZone: 'America/New_York', tuig: 2026, bulan: 3, adlaw: 1, oras: 12, minuto: 0, ikaduha: 0 }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[America/New_York]
Pag-parse Gitabonan namo ang programmatic nga paghimo sa impormasyon sa petsa ug oras. Karon atong tan-awon ang parsing. Ang pag-parse usa ka lugar diin ang Moment mas flexible kaysa sa built-in nga Temporal API. Mahimo nimong ma-parse ang string sa petsa pinaagi sa pagpasa niini sa function sa higayon. Uban sa usa ka argumento, ang Moment nagpaabot sa ISO date string, apan mahimo nimong gamiton ang alternatibong mga format kung maghatag ka ug ikaduhang argumento nga nagtino sa format sa petsa nga gigamit.
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); // Panahon<2026-02-21T09:00:00-05:00>
console.log(formattedDate); // Panahon<2026-02-21T09:00:00-05:00>
Sa karaan nga mga bersyon, ang Moment makahimo sa usa ka labing maayo nga pagtag-an sa pag-parse sa bisan unsang arbitraryong gi-format nga string sa petsa. Kini mahimong mosangpot sa dili matag-an nga mga resulta. Pananglitan, ang 02-03-2026 ba Pebrero 2 o Marso 3? Tungod niini nga rason, ang mas bag-ong mga bersyon sa Moment nagpakita sa usa ka prominenteng pasidaan sa deprecation kon kini gitawag nga walay ISO formatted date string (gawas kon ang ikaduhang argumento nga adunay gusto nga format gihatag usab). Ang Temporal mag-parse lang ug espesipikong gi-format nga string sa petsa. Ang string kinahanglan nga mosunod sa ISO 8601 format o sa iyang extension, RFC 9557. Kon ang usa ka non-compliant date string ipasa ngadto sa gikan sa pamaagi, Temporal molabay sa usa ka RangeError.
// Gamit ang RFC 9557 date string 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
// Gamit ang wala mailhi nga string sa petsa const otherDate = Temporal.Instant.from('2/21/26 9:00:00'); // RangeError: Temporal nga sayop: Invalid nga karakter samtang nag-parse sa tuig nga bili.
Ang eksaktong mga kinahanglanon sa string sa petsa nagdepende kung unsang klase sa Temporal nga butang ang imong gimugna. Sa pananglitan sa ibabaw, ang Temporal.Instant nanginahanglan usa ka bug-os nga ISO8601 o RFC 9557 date string nga nagpiho sa petsa ug oras gamit ang time zone offset, pero mahimo ka usab nga maghimo ug PlainDate o PlainTime nga mga butang gamit lang ang subset sa format sa petsa. 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
Timan-i nga kini nga mga kuwerdas kinahanglan gihapon nga motuman sa gipaabot nga format, o usa ka sayup ang ilabay.
// Paggamit sa usa ka dili pagsunod sa mga kuwerdas sa oras. Kining tanan maglabay ug RangeError. Temporal.PlainTime.gikan sa('9:00'); Temporal.PlainTime.gikan('9:00:00 AM');
Pro tip: Pagdumala sa dili ISO nga mga kuwerdasTungod kay ang Temporal nag-una sa kasaligan, dili kini mosulay sa pagtag-an sa format sa usa ka hilo sama sa 02-01-2026. Kung ang imong tinubdan sa datos naggamit sa ingon nga mga kuwerdas, kinahanglan nimo nga buhaton ang pipila nga pagmaniobra sa pisi aron mabag-o ang mga kantidad sa usa ka string nga ISO sama sa 2026-02-01 sa dili pa mosulay sa paggamit niini sa Temporal.
Pag-format Sa higayon nga ikaw adunay usa ka Moment o Temporal nga butang, tingali gusto nimo nga i-convert kini ngadto sa usa ka pormat nga string sa usa ka punto. Kini usa ka higayon diin ang Moment medyo labi ka dali. Gitawag nimo ang pamaagi sa format sa butang nga adunay usa ka hilo sa mga token nga naghulagway sa gusto nga format sa petsa. const date = gutlo();
console.log(date.format('MM/DD/YYYY')); // 02/22/2026
console.log(date.format('MMMM Do YYYY, h:mm:ss a')); // Pebrero 22, 2026, 8:18:30 sa gabii
Sa laing bahin, ang Temporal nagkinahanglan kanimo nga mahimong mas verbose. Ang temporal nga mga butang, sama sa Instant, adunay toLocaleString nga pamaagi nga modawat sa lain-laing mga opsyon sa pag-format nga gipiho isip mga kabtangan sa usa ka butang.
const date = Temporal.Now.instant();
// nga walay mga argumento, atong makuha ang default nga format alang sa kasamtangan nga lokal console.log(date.toLocaleString()); // 2/22/2026, 8:23:36 PM (nagtuo nga usa ka lokal nga en-US)
// pass formatting options para makamugna ug custom format string console.log(date.toLocaleString('en-US', { bulan: 'taas', adlaw: 'numero', tuig: 'numero', oras: '2-digit', minuto: '2-digit' })); // Pebrero 22, 2026 sa 8:23 PM
// ipasa lang ang mga field nga gusto nimo sa format string console.log(date.toLocaleString('en-US', { bulan: 'mubo', adlaw: 'numero' })); // Pebrero 22
Ang pag-format sa temporal nga petsa aktuwal nga naggamit sa Intl.DateTimeFormat API (nga anaa na sa modernong mga browser) ubos sa hood. Kana nagpasabut nga makahimo ka og usa ka magamit nga DateTimeFormat nga butang gamit ang imong naandan nga mga kapilian sa pag-format, dayon ipasa ang Temporal nga mga butang sa pamaagi sa pag-format niini. Tungod niini, wala kini nagsuporta sa mga custom nga format sa petsa sama sa Moment. Kung kinahanglan nimo ang usa ka butang sama sa 'Q1 2026' o uban pang espesyal nga pag-format, mahimo’g kinahanglan nimo ang usa ka naandan nga code sa pag-format sa petsa o pag-abot sa usa ka librarya sa ikatulo nga partido. const formatter = bag-ong Intl.DateTimeFormat('en-US', { bulan: '2-digit', adlaw: '2-digit', tuig: 'numero' });
const date = Temporal.Now.instant(); console.log(formatter.format(petsa)); // 02/22/2026
Ang mga token sa pag-format sa Moment mas simple nga isulat, apan dili kini mahigalaon sa lokal. Ang format nga mga string "hard code" mga butang sama sa bulan/adlaw nga order. Ang bentaha sa paggamit sa usa ka butang sa pag-configure, sama sa gihimo sa Temporal, mao nga kini awtomatiko nga mopahiangay sa bisan unsang gihatag nga lokal ug mogamit sa husto nga format. const date = Temporal.Now.instant();
const formatOptions = { bulan: 'numero', adlaw: 'numero', tuig: 'numero' };
console.log(date.toLocaleString('en-US', formatOptions)); // 2/22/2026
console.log(date.toLocaleString('en-GB', formatOptions)); // 22/02/2026
Mga kalkulasyon sa petsa Sa daghang mga aplikasyon, kinahanglan nimo nga tapuson ang paghimo sa pipila nga mga kalkulasyon sa usa ka petsa. Mahimo nimong idugang o ibawas ang mga yunit sa oras (mga adlaw, oras, segundo, ug uban pa). Pananglitan, kung aduna kay petsa karon, mahimo nimong ipakita sa user ang petsa 1 ka semana gikan karon. Ang mga butang sa gutlo adunay mga pamaagi sama sa pagdugang ug pagkunhod nga naghimo niini nga mga operasyon. Kini nga mga gimbuhaton nagkuha usa ka kantidad ug usa ka yunit, pananglitan: pagdugang (7, 'mga adlaw'). Usa ka hinungdanon kaayo nga kalainan tali sa Moment ug Temporal, bisan pa, mao nga kung himuon kini nga mga kalkulasyon sa petsa, ang nagpahiping butang giusab ug nawala ang orihinal nga kantidad niini. const karon = moment();
console.log(karon); // Panahon<2026-02-24T20:08:36-05:00>
const nextWeek = now.add(7, 'days'); console.log(nextWeek); // Panahon<2026-03-03T20:08:36-05:00>
// Gotcha - ang orihinal nga butang gi-mutate console.log(karon); // Panahon<2026-03-03T20:08:36-05:00>
Aron malikayan ang pagkawala sa orihinal nga petsa, mahimo nimong tawagan ang clone sa butang nga Moment aron makahimo usa ka kopya. const karon= gutlo(); const nextWeek = now.clone().add(7, 'days');
console.log(karon); // Higayon<2026-02-24T20:12:55-05:00>
console.log(nextWeek); // Panahon<2026-03-03T20:12:55-05:00>
Sa laing bahin, ang Temporal nga mga butang dili mausab. Sa higayon nga nakahimo ka og butang sama sa Instant, PlainDate, ug uban pa, ang bili sa maong butang dili na mausab. Ang temporal nga mga butang aduna usab mga paagi sa pagdugang ug pagminus. Ang temporal usa ka gamay nga pagpili kung unsang mga yunit sa oras ang mahimong idugang kung unsang mga tipo sa butang. Pananglitan, dili ka makadugang mga adlaw sa usa ka Instant:
const karon = Temporal.Now.instant(); const nextWeek = karon.add({mga adlaw: 7}); // RangeError: Temporal nga sayop: Ang kinadak-ang yunit dili mahimong usa ka yunit sa petsa
Kini tungod kay ang mga instant nga butang nagrepresentar sa usa ka piho nga punto sa oras sa UTC ug mga agnostiko sa kalendaryo. Tungod kay ang gitas-on sa usa ka adlaw mahimong mausab base sa mga lagda sa time zone sama sa Daylight Saving Time, kini nga kalkulasyon dili magamit sa usa ka Instant. Mahimo nimo, bisan pa, mahimo kini nga operasyon sa ubang mga lahi sa mga butang, sama sa usa ka PlainDateTime: const karon = Temporal.Now.plainDateTimeISO(); console.log(now.toLocaleString()); // 2/24/2026, 8:23:59 PM
const nextWeek = karon.add({mga adlaw: 7});
// Timan-i nga ang orihinal nga PlainDateTime nagpabilin nga wala mausab console.log(now.toLocaleString()); // 2/24/2026, 8:23:59 PM
console.log(nextWeek.toLocaleString()); // 3/3/2026, 8:23:59 PM
Mahimo usab nimong kuwentahon kung pila ang oras sa taliwala sa duha ka Moment o Temporal nga mga butang. Uban sa diff function sa Moment, kinahanglan nimo nga maghatag usa ka yunit alang sa granularity, kung dili kini ibalik ang kalainan sa millisecond. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');
console.log(date2.diff(date1)); // 91800000
console.log(date2.diff(date1, 'days')); // 1
Aron mahimo kini sa usa ka Temporal nga butang, mahimo nimong ipasa ang laing Temporal nga butang ngadto sa iyang hangtod o sukad nga mga pamaagi. Nagbalik kini ug Temporal.Duration nga butang nga adunay impormasyon bahin sa kalainan sa oras. Ang butang nga Gidugayon adunay mga kabtangan alang sa matag bahin sa kalainan, ug mahimo usab nga makamugna usa ka string nga gidugayon sa ISO 8601 nga nagrepresentar sa kalainan sa oras.
const date1 = Temporal.PlainDateTime.from('2026-02-21T09:00:00'); const date2 = Temporal.PlainDateTime.from('2026-02-22T10:30:00');
// Ang kinadak-angUnit nagtino sa kinadak-ang yunit sa panahon nga irepresentar // sa gidugayon nga kalkulasyon const diff = date2.since(date1, {pinakadako nga Yunit: 'adlaw' });
console.log(diff.days); // 1
console.log(diff.hours); // 1
console.log(diff.minutes); // 30
console.log(diff.toString()); // P1DT1H30M // (ISO 8601 duration string: 1 ka adlaw, 1 ka oras, 30 ka minuto)
Pagkumpara sa mga Petsa Ug Panahon Ang Moment ug Temporal parehas nimo nga ikumpara ang mga petsa ug oras aron mahibal-an kung unsa ang nag-una sa lain, apan gamita ang lainlaing mga pamaagi sa API. Ang Moment naghatag og mga pamaagi sama sa isBefore, isAfter, ug isSame aron itandi ang duha ka Moment nga mga butang. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');
console.log(date1.isBefore(date2)); // tinuod
Ang Temporal naggamit ug static nga paagi sa pagtandi aron sa paghimo sa pagtandi tali sa duha ka butang nga parehas nga tipo. Kini mobalik -1 kon ang unang petsa moabut sa wala pa ang ikaduha, 0 kon sila managsama, o 1 kon ang unang petsa moabut human sa ikaduha. Ang mosunod nga pananglitan nagpakita kon unsaon pagtandi ang duha ka PlainDate nga mga butang. Ang duha ka argumento sa Temporal.PlainDate.compare kinahanglang PlainDate nga mga butang.
const date1 = Temporal.PlainDate.from({tuig: 2026, bulan: 2, adlaw: 24 }); const date2 = Temporal.PlainDate.from({tuig: 2026, bulan: 3, adlaw: 24 });
// date1 muabot sa date2, so -1 console.log(Temporal.PlainDate.compare(date1, date2));
// Sayop kon kita mosulay sa pagtandi sa duha ka mga butang sa lain-laing mga matang console.log(Temporal.PlainDate.compare(date1, Temporal.Now.instant())); // TypeError: Temporal nga sayop: Dili balido nga PlainDate fields nga gihatag.
Sa partikular, gipasayon niini ang paghan-ay sa han-ay sa Temporal nga mga butang sa kronolohikal nga paagi. // Usa ka han-ay sa Temporal.PlainDate nga mga butang const petsa = [...];
// gamita ang Temporal.PlainDate.compare isip comparator function dates.sort(Temporal.PlainDate.compare);
Mga Pagkakabig sa Time Zone Ang kinauyokan nga librarya sa Moment wala mosuporta sa mga pagkakabig sa time zone. Kung kinahanglan nimo kini nga gamit, kinahanglan nimo usab nga i-install ang package nga moment-timezone. Kini nga pakete dili matay-og sa kahoy, ug busa makadugang pag-ayo sa gidak-on sa imong bundle. Kung na-install na nimo ang moment-timezone, mahimo nimong i-convert ang mga butang sa Moment sa lainlaing mga time zone gamit ang tz nga pamaagi. Sama sa ubang mga operasyon sa Moment, kini nag-mutate sa nagpahipingbutang. // Gituohan nga panahon sa US Eastern const karon = moment(); console.log(karon); // Sandali<2026-02-28T20:08:20-05:00>
// I-convert sa oras sa Pasipiko. // Nawala ang orihinal nga oras sa Sidlakan. now.tz('America/Los_Angeles'); console.log(karon); // Panahon<2026-02-28T17:08:20-08:00>
Ang paggana sa time zone kay natukod sa Temporal nga API kung naggamit ug Temporal.ZonedDateTime nga butang. Kini nga mga butang naglakip sa usa ka paagi sa TimeZone nga nagbalik sa usa ka bag-ong ZonedDateTime nga nagrepresentar sa parehas nga oras sa oras, apan sa gitakda nga time zone. // Pag-usab, sa paghunahuna sa US Eastern nga panahon const karon = Temporal.Now.zonedDateTimeISO(); console.log(now.toLocaleString()); // 2/28/2026, 8:12:02 PM EST
// I-convert sa oras sa Pasipiko const nowPacific = now.withTimeZone('America/Los_Angeles'); console.log(karonPacific.toLocaleString()); // 2/28/2026, 5:12:02 PM PST
// Ang orihinal nga butang nagpabilin nga wala mausab console.log(now.toLocaleString()); // 2/28/2026, 8:12:02 PM EST
Mubo nga sulat: Ang gi-format nga mga kantidad nga gibalik sa toLocaleString, ingon sa gipasabut sa ngalan, nagsalig sa lokal. Ang sampol nga kodigo gihimo sa en-US nga lokal, busa ang pormat sama niini: 2/28/2026, 5:12:02 PM PST. Sa laing lugar, kini mahimong lahi. Pananglitan, sa en-GB locale, makakuha ka usa ka butang sama sa 28/2/2026, 17:12:02 GMT-8. Usa ka Tinuod nga Kalibutan nga Refactoring Ibutang ta nga naghimo kami usa ka app alang sa pag-iskedyul sa mga panghitabo sa mga time zone. Kabahin sa kini nga app usa ka function, getEventTimes, nga nagkuha usa ka string nga ISO 8601 nga nagrepresentar sa oras ug petsa sa panghitabo, usa ka lokal nga time zone, ug usa ka target nga time zone. Ang function nagmugna og pormat nga oras ug petsa nga mga kuwerdas alang sa panghitabo sa duha ka time zone. Kung ang function gihatagan usa ka input string nga dili balido nga oras / petsa nga string, kini magbutang usa ka sayup. Ania ang orihinal nga pagpatuman, gamit ang Moment (nagkinahanglan usab sa paggamit sa package nga moment-timezone).
import nga gutlo gikan sa 'moment-timezone';
function getEventTimes(inputString, userTimeZone, targetTimeZone) { const timeFormat = 'MMM D, YYYY, h:mm:ss a z';
// 1. Paghimo sa unang higayon sa time zone sa user const eventTime = moment.tz( inputString, moment.ISO_8601, // Pagpaabot ug ISO 8601 string tinuod, // Estrikto nga pag-parse userTimeZone );
// Ilabay ang usa ka sayup kung ang inputString wala magrepresentar sa usa ka balido nga petsa kon (!eventTime.isValid()) { ilabay ang bag-ong Error('Invalid date/time input'); }
// 2. Kalkulahin ang target nga oras // KRITIKAL: Kinahanglan natong i-clone, o ang 'EventTime' mausab hangtod sa hangtod! const targetTime = eventTime.clone().tz(targetTimeZone);
balik { lokal: eventTime.format(timeFormat), target: targetTime.format(timeFormat), }; }
const schedule = getEventTimes( '2026-03-05T15:00-05:00', 'America/New_York', 'Europe/London', );
console.log(schedule.local); // Mar 5, 2026, 3:00:00 sa hapon EST
console.log(schedule.target); // Mar 5, 2026, 8:00:00 sa GMT
Sa kini nga pananglitan, naggamit kami usa ka gipaabut nga format sa petsa nga ISO 8601, nga makatabang nga gihimo sa Moment. Gigamit usab namo ang estrikto nga pag-parse, nga nagpasabot nga ang Moment dili mosulay sa pagtag-an sa usa ka string sa petsa nga dili mohaum sa format. Kung ang usa ka non-ISO date string ipasa, kini moresulta sa usa ka dili balido nga petsa nga butang, ug kami maglabay sa usa ka sayup. Ang Temporal nga pagpatuman morag susama, apan adunay pipila ka mahinungdanong mga kalainan.
function getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. Parse ang input direkta ngadto sa usa ka Instant, dayon paghimo // usa ka ZonedDateTime sa user's zone. const instant = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);
// 2. Convert sa target zone // Kini awtomatik nga nagbalik ug BAG-ONG butang; Luwas ang 'EventTime'. const targetTime = eventTime.withTimeZone(targetTimeZone);
// 3. Format gamit ang Intl (built-in) const mga kapilian = { tuig: 'numero', bulan: 'mubo', adlaw: 'numero', oras: 'numero', minuto: '2-digit', ikaduha: '2-digit', timeZoneName: 'mubo' };
balik { lokal: eventTime.toLocaleString(navigator.language, mga kapilian), target: targetTime.toLocaleString(navigator.language, mga kapilian) }; }
const schedule = getEventTimes( '2026-03-05T15:00-05:00', 'America/New_York', 'Europe/London', );
console.log(schedule.local); // Mar 5, 2026, 3:00:00 PM EST
console.log(schedule.target); // Mar 5, 2026, 8:00:00 PM GMT
Uban sa Moment, kinahanglan namon nga klaro nga ipiho ang usa ka format nga string alang sa sangputanan nga mga string sa petsa. Bisan unsa pa ang lokasyon o lokal sa gumagamit, ang mga oras sa panghitabo kanunay nga maporma ingon Mar 5, 2026, 3:00:00sa EST. Usab, dili kinahanglan nga klaro nga ilabay ang usa ka eksepsiyon. Kung ang usa ka dili balido nga string ipasa sa Temporal.Instant.from, ang Temporal molabay sa eksepsiyon alang kanato. Ang usa ka butang nga matikdan mao nga bisan sa estrikto nga pag-parse, ang bersyon sa Moment labi pa ka maluloy-on. Temporal nagkinahanglan sa time zone offset sa katapusan sa string. Kinahanglan usab nimong timan-an nga tungod kay naggamit kami og navigator.language, kini nga code modagan lamang sa usa ka palibot sa browser, tungod kay ang navigator wala gihubit sa usa ka palibot sa Node.js. Ang Temporal nga pagpatuman naggamit sa kasamtangang lokal nga browser (navigator.language), mao nga ang user awtomatikong makakuha sa mga oras sa panghitabo nga maporma sa ilang lokal nga format sa oras. Sa en-US locale, kini mao ang Mar 5, 2026, 3:00:00 pm EST. Bisan pa, kung ang tiggamit naa sa London, pananglitan, ang mga oras sa panghitabo ma-format ingon 5 Mar 2026, 15:00:00 GMT-5. Summary
Aksyon Moment.js Temporal Kasamtangang panahon higayon () Temporal.Now.zonedDateTimeISO() Pag-parse sa ISO gutlo(str) Temporal.Instant.gikan sa(str) Pagdugang og oras .add(7, 'mga adlaw') (mutates) .add({ mga adlaw: 7 }) (bag-ong butang) Kalainan .diff(uban pa, 'oras') .sukad(sa uban).oras Time zone .tz('Zone/Ngalan') .withTimeZone('Zone/Ngalan')
Sa una nga pagtan-aw, ang kalainan mahimong gamay nga lahi (ug sa kaso sa Temporal, usahay mas verbose ug mas estrikto) nga syntax, apan adunay pipila ka mahinungdanong bentaha sa paggamit sa Temporal kay sa Moment.js:
Ang labi ka klaro nagpasabut nga mas gamay nga mga sorpresa ug wala damha nga mga bug. Ang gutlo mahimong mopatim-aw nga mas humok, apan kini naglakip sa "pagtag-an," nga usahay moresulta sa dili husto nga mga petsa. Kung hatagan nimo ang Temporal nga butang nga dili balido, kini adunay sayup. Kung ang code modagan, nahibal-an nimo nga adunay ka balido nga petsa. Ang gutlo mahimong makadugang sa mahinungdanong gidak-on sa bundle sa aplikasyon, ilabina kon ikaw naggamit sa moment-timezone nga pakete. Ang Temporal walay gidugang (sa higayon nga kini ipadala sa imong target nga mga browser). Ang pagkadili-mabag-o naghatag kanimo og pagsalig nga dili ka mawad-an o ma-overwrite ang data kung maghimo mga pagbag-o sa petsa ug operasyon. Nagkalainlain nga mga representasyon sa oras (Instant, PlainDateTime, ZonedDateTime) depende sa imong mga kinahanglanon, diin ang Moment kanunay usa ka wrapper sa usa ka timestamp sa UTC. Gigamit sa Temporal ang mga Intl API para sa pag-format sa petsa, nga nagpasabot nga mahimo kang adunay locale-aware nga pag-format nga dili kinahanglan nga tin-aw nga ipiho ang mga token.
Mga Nota Sa Polyfill Sama sa gihisgutan sa sayo pa, adunay usa ka Temporal nga polyfill nga magamit, gipang-apod-apod isip usa ka npm nga pakete nga ginganlan @js-temporal/polyfill. Kung gusto nimong gamiton ang Temporal karon, kinahanglan nimo kini nga polyfill aron suportahan ang mga browser sama sa Safari nga wala pa ipadala ang API. Ang dili maayo nga balita niini mao nga kini makadugang sa gidak-on sa imong bundle. Ang maayong balita mao nga kini nagdugang labi ka gamay kaysa sa gutlo o moment-timezone. Ania ang usa ka pagtandi sa mga gidak-on sa bundle sama sa gitaho sa Bundlephobia.com, usa ka website nga nagpresentar sa impormasyon sa npm package sizes (i-klik ang matag ngalan sa package aron makita ang Bundlephobia analysis):
Pakete Giminusan Giminusan ug gi-gzip @js-temporal/polyfill 154.1 kB 44.1 kB higayon 294.4 kB 75.4 kB moment-timezone 1 MB 114.2 kB
Ang polyfill usab adunay kasaysayan nga adunay pipila ka mga isyu sa pasundayag sa palibot sa paggamit sa panumduman, ug sa panahon sa pagsulat, kini giisip nga naa sa estado sa alpha. Tungod niini, dili nimo gusto nga gamiton kini sa produksiyon hangtod nga kini makaabut sa usa ka labi ka hamtong nga kahimtang. Ang uban nga maayong balita mao nga hinaut nga ang polyfill dili na kinahanglan pa (gawas kung kinahanglan nimo nga suportahan ang mga tigulang nga browser, siyempre). Sa panahon sa pagsulat, ang Temporal gipadala sa Chrome, Edge, ug Firefox. Dili pa kini andam sa Safari, bisan kung kini makita nga magamit sa usa ka runtime nga bandila sa pinakabag-o nga Technology Preview.