Ampir naon waé aplikasi anu ditulis dina JavaScript tiasa dianggo sareng waktos atanapi kaping dina sababaraha kapasitas. Dina awalna, ieu dugi ka diwangun-di Tanggal API. API ieu ngawengku pungsi dasar, tapi rada kawates dina naon eta tiasa ngalakukeun. Perpustakaan pihak katilu kawas Moment.js, sarta engké diwangun-di API kayaning API Intl jeung API Temporal anyar, nambahan kalenturan leuwih gede pikeun gawé bareng waktu jeung kaping. Munggah Jeung Mudunna Momen.js Moment.js mangrupikeun perpustakaan JavaScript kalayan utilitas anu kuat pikeun damel sareng waktos sareng kaping. Éta kalebet fitur anu leungit tina API Tanggal dasar, sapertos manipulasi zona waktos, sareng ngajantenkeun seueur operasi umum langkung saderhana. Momen ogé kalebet fungsi pikeun pormat tanggal sareng waktos. Éta janten perpustakaan anu seueur dianggo dina seueur aplikasi anu béda. Nanging, Moment ogé ngagaduhan masalah na. Éta perpustakaan ageung, sareng tiasa nambihan sacara signifikan kana ukuran bungkusan aplikasi. Kusabab perpustakaan henteu ngadukung oyag tangkal (fitur bundler modern anu tiasa ngahapus bagian perpustakaan anu henteu kapake), sadayana perpustakaan Moment kalebet upami anjeun ngan ukur nganggo hiji atanapi dua fungsina. Masalah anu sanés sareng Momen nyaéta kanyataan yén objék anu didamelna tiasa mutable. Nelepon fungsi nu tangtu dina obyék Moment boga efek samping jeung mutates nilai obyék éta. Ieu bisa ngakibatkeun kabiasaan teu kaduga atawa bug. Taun 2020, pangropéa Moment mutuskeun pikeun nempatkeun perpustakaan kana mode pangropéa. Henteu aya pamekaran fitur énggal anu dilakukeun, sareng para pangurus nyarankeun henteu nganggo éta pikeun proyék-proyék énggal. Aya perpustakaan tanggal JavaScript séjén, kayaning tanggal-fns, tapi aya pamaén anyar di kota, hiji API diwangun langsung kana JavaScript: Temporal. Ieu standar anyar nu ngeusian dina liang tina API Tanggal aslina ogé solves sababaraha watesan kapanggih dina Momen jeung perpustakaan séjén. Naon Temporal? Temporal mangrupikeun API waktos sareng tanggal énggal anu ditambah kana standar ECMAScript, anu ngahartikeun JavaScript modern. Dina Maret 20266, éta parantos ngahontal Tahap 4 tina prosés TC39 (panitia anu ngawas usulan sareng tambihan kana basa JavaScript), sareng bakal dilebetkeun kana vérsi salajengna tina spésifikasi ECMAScript. Éta parantos dilaksanakeun dina sababaraha panyungsi: Chrome 144+ sareng Firefox 139+, sareng Safari diperkirakeun bakal ngiringan pas. Polyfill ogé sayogi pikeun panyungsi anu teu didukung sareng Node.js. Temporal API nyiptakeun objék nu, umumna, ngagambarkeun moments dina jangka waktu nu. Ieu tiasa janten prangko full-time sareng tanggal dina zona waktos anu ditangtukeun, atanapi tiasa janten conto umum tina "jam témbok" waktos tanpa zona waktos atanapi inpormasi tanggal. Sababaraha fitur utama Temporal ngawengku:

Waktos sareng atanapi tanpa kaping. Obyék Temporal tiasa ngagambarkeun waktos khusus dina tanggal khusus, atanapi waktos tanpa inpormasi tanggal. Hiji tanggal husus, tanpa waktu, ogé bisa digambarkeun. Pangrojong zona waktos.Objék temporal pinuh sadar zona waktos sareng tiasa dirobih dina zona waktos anu béda. Moment ogé ngadukung zona waktos, tapi peryogi perpustakaan zona waktos tambahan. Immutability.Sakali objék Temporal dijieun, éta teu bisa dirobah. Aritmetika waktos atanapi konvérsi zona waktos henteu ngarobih objék anu aya dina dasarna. Gantina, aranjeunna ngahasilkeun objék Temporal anyar. 1 basis indexing.A sumber umum tina bug jeung API Tanggal (kitu oge jeung Momen) nyaéta yén bulan anu nol-indéks. Ieu ngandung harti yén Januari nyaéta bulan 0, tinimbang bulan 1 sakumaha urang sadayana ngartos dina kahirupan nyata. Temporal ngalereskeun ieu ku ngagunakeun indexing basis 1 - Januari nyaéta bulan 1. Éta diwangun kana browser. Kusabab Temporal mangrupikeun API dina browser éta sorangan, éta henteu nambihan nanaon kana ukuran bungkusan aplikasi anjeun.

Éta ogé penting pikeun dicatet yén API Tanggal teu bade jauh. Bari Temporal supersedes API ieu, teu keur dihapus atawa deprecated. Seueur aplikasi bakal rusak upami panyungsi ngadadak ngahapus API Tanggal. Nanging, émut ogé yén Momen ayeuna dianggap salaku proyék warisan dina modeu pangropéa. Dina sesa artikel, urang bakal nempo sababaraha "resep" pikeun migrasi kode basis Momen ka API Temporal anyar. Hayu urang mimitian refactoring! Nyiptakeun Objék Tanggal sareng Waktos Sateuacan urang tiasa ngamanipulasi kaping sareng waktos, urang kedah nyiptakeun objék anu ngagambarkeun aranjeunna. Pikeun nyieun obyék Moment ngalambangkeun tanggal sareng waktos ayeuna, nganggo fungsi momen. const ayeuna = moment(); console.log (ayeuna); // Momen<2026-02-18T21:26:29-05:00>

Obyék ieu ayeuna tiasa diformat atanapi dimanipulasi upami diperyogikeun.

// ngarobah kana UTC //warning: Ieu mutates obyék Momen sarta nempatkeun dina modeu UTC! console.log(now.utc()); // Momen<2026-02-19T02:26:29Z>

// nyitak string anu diformat - perhatikeun yén éta nganggo waktos UTC ayeuna console.log (now.format ( 'MM / DD / YYYY hh: mm: ss a')); // 02/19/2026 02:27:07

Hal konci pikeun nginget ngeunaan Momen nyaéta yén obyék Momen sok kalebet inpormasi ngeunaan waktos sareng kaping. Upami anjeun ngan ukur kedah damel sareng inpormasi waktos, ieu biasana henteu kunanaon, tapi tiasa nyababkeun kabiasaan anu teu disangka-sangka dina kaayaan sapertos Waktos Daylight Saving atanapi taun kabisat, dimana tanggalna tiasa gaduh pangaruh kana itungan waktos. Temporal leuwih fleksibel. Anjeun tiasa nyiptakeun obyék anu ngagambarkeun tanggal sareng waktos ayeuna ku cara nyiptakeun objék Temporal.Instant. Ieu ngagambarkeun titik dina waktu nu ditetepkeun ku waktu saprak "epoch" (tengah wengi UTC dina 1 Januari 1970). Temporal tiasa ngarujuk instan ieu dina waktosna kalayan akurasi tingkat nanosecond. const ayeuna = Temporal.Now.instant();

// tingali nanoseconds atah saprak epoch nu console.log (now.epochNanoseconds); // 1771466342612000000n

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

// pormat pikeun zona waktos tinangtu console.log(now.toString({timeZone: 'Amérika/New_York'})); // 2026-02-18T20:56:57.905-05:00

Temporal.Objék instan ogé bisa dijieun pikeun waktu jeung tanggal husus ku ngagunakeun métode statik ti.

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

// Format instan dina zona waktos lokal. Catet yén ieu ngan ukur ngadalikeun // pormat - teu mutate obyék kawas moment.utc manten. console.log(myInstant.toString({timeZone: 'America/New_York'})); // 2026-02-18T21:10:00-05:00

Anjeun oge bisa nyieun tipe séjén objék Temporal, kaasup:

Temporal.PlainDate: Hiji tanggal jeung euweuh informasi waktu. Temporal.PlainTime: Hiji waktos tanpa informasi tanggal. Temporal.ZonedDateTime: Hiji tanggal jeung waktu dina zona waktu husus.

Masing-masing gaduh metode ti anu tiasa disebat ku obyék anu netepkeun tanggal sareng / atanapi waktos, atanapi string tanggal pikeun diparse. // Ngan hiji tanggal const kiwari = Temporal.PlainDate.from({ taun: 2026, bulan: 2, // catetan urang nuju ngagunakeun 2 pikeun Pébruari poé: 18 }); console.log(today.toString()); // 2026-02-18

// Ngan sakedap const lunchTime = Temporal.PlainTime.from({ jam: 12 }); console.log (lunchTime.toString ()); // 12:00:00

// Hiji tanggal sareng waktos di zona waktos Wétan AS const dueAt = Temporal.ZonedDateTime.from({ TimeZone: 'Amérika/New_York', taun: 2026, bulan: 3, dinten: 1, jam: 12, menit: 0, kadua: 0 }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[America/New_York]

Parsing Kami parantos nutupan kreasi programmatic inpormasi tanggal sareng waktos. Ayeuna hayu urang nempo parsing. Parsing mangrupikeun daérah dimana Momen langkung fleksibel tibatan API Temporal anu diwangun. Anjeun tiasa nga-parse string tanggal ku jalan ngalirkeun kana fungsi momen. Kalayan argumen tunggal, Moment ngaharepkeun string tanggal ISO, tapi anjeun tiasa nganggo format alternatif upami anjeun nyayogikeun argumen kadua anu nangtukeun format tanggal anu dianggo.

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

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

Dina vérsi anu langkung lami, Moment bakal ngadamel perkiraan anu saé pikeun nga-parse string tanggal anu diformat sacara wenang. Ieu bisa ngakibatkeun hasil unpredictable. Salaku conto, nyaéta 02-03-2026 2 Pebruari atanapi 3 Maret? Ku sabab kitu, vérsi Momen anu langkung énggal nunjukkeun peringatan deprecation anu menonjol upami éta disebat tanpa string tanggal anu diformat ISO (kecuali argumen kadua kalayan format anu dipikahoyong ogé dipasihkeun). Temporal ngan bakal parse string tanggal husus formatna. string kudu patuh kana format ISO 8601 atanapi extension na, RFC 9557. Mun string tanggal non-patuh disalurkeun kana metoda ti, Temporal bakal buang RangeError a.

// Ngagunakeun string tanggal RFC 9557 const myDate = Temporal.Instant.from ('2026-02-21T09: 00: 00-05: 00 [Amerika / New_York]'); console.log(myDate.toString({timeZone: 'America/New_York'})); // 2026-02-21T09:00:00-05:00

// Ngagunakeun string tanggal kanyahoan const otherDate = Temporal.Instant.from ('2/21/26 9:00:00'); // RangeError: Kasalahan temporal: Karakter teu valid bari parsing nilai sataun.

Sarat pasti tina string tanggal gumantung kana jenis objék Temporal nu nuju nyieun. Dina conto di luhur, Temporal.Instant merlukeun ISO pinuh8601 atanapi RFC 9557 titimangsa string nangtukeun tanggal jeung waktu jeung zona waktu offset, tapi anjeun oge bisa nyieun PlainDate atanapi PlainTime objék maké ngan sawaréh ti format tanggal. 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

Catet yén string ieu masih kudu sasuai jeung format ekspektasi, atawa kasalahan bakal dialungkeun.

// Ngagunakeun string waktos non-patuh. Ieu sadayana bakal ngalungkeun RangeError. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00 AM');

Tip Pro: Nanganan string non-ISOKusabab Temporal prioritize reliabilitas, éta moal coba nebak format string kawas 02-01-2026. Upami sumber data anjeun nganggo senar sapertos kitu, anjeun kedah ngalakukeun sababaraha manipulasi senar pikeun nyusun ulang nilai kana senar ISO sapertos 2026-02-01 sateuacan nyobian nganggo Temporal.

pormat Sakali anjeun gaduh Moment atanapi Temporal objék, Anjeun meureun bakal hoyong ngarobah kana string formatna di sawatara titik. Ieu mangrupikeun conto dimana Momen rada langkung ringkes. Anjeun nyauran metodeu format obyék kalayan senar token anu ngajelaskeun format tanggal anu dipikahoyong. titimangsa const = moment();

console.log(date.format('MM/DD/YYYY')); // 02/22/2026

console.log (date.format ( 'MMMM Naha YYYY, h: mm: ss a')); // 22. Pébruari 2026, 20:18:30

Di sisi séjén, Temporal merlukeun anjeun jadi bit leuwih verbose. Objék temporal, sapertos Instan, gaduh metodeu toLocaleString anu nampi sababaraha pilihan pormat anu ditetepkeun salaku pasipatan hiji obyék.

tanggal const = Temporal.Now.instant();

// kalayan henteu aya argumen, urang bakal nampi format standar pikeun lokal ayeuna console.log(date.toLocaleString()); // 2/22/2026, 8:23:36 PM (anggap lokal en-US)

// lulus pilihan pormat pikeun ngahasilkeun string format custom console.log(date.toLocaleString('en-US', { bulan: 'panjang', dinten: 'numeric', taun: 'numerik', jam: '2-angka', menit: '2-angka' })); // Pébruari 22, 2026 di 20:23

// ukur lulus widang rék di format string console.log(date.toLocaleString('en-US', { bulan: 'pondok', dinten: 'numeric' })); // 22 Pébruari

Pormat tanggal temporal sabenerna ngagunakeun Intl.DateTimeFormat API (anu geus gampang sadia dina browser modern) handapeun tiung. Éta hartosna anjeun tiasa nyiptakeun objék DateTimeFormat anu tiasa dianggo deui sareng pilihan pormat khusus anjeun, teras paskeun objék Temporal kana metode pormatna. Kusabab ieu, éta henteu ngadukung format tanggal khusus sapertos Moment. Upami anjeun peryogi sapertos 'Q1 2026' atanapi pormat khusus anu sanés, anjeun panginten peryogi sababaraha kode pormat tanggal khusus atanapi ngahontal perpustakaan pihak katilu. const formatter = anyar Intl.DateTimeFormat('en-US', { bulan: '2-angka', dinten: '2-angka', taun: 'numerik' });

tanggal const = Temporal.Now.instant(); console.log (formatter.format (tanggal)); // 02/22/2026

Token pormat Moment langkung saderhana pikeun ditulis, tapi aranjeunna henteu ramah-lokal. Format string "kode teuas" hal kawas urutan bulan / dinten. Kauntungannana ngagunakeun obyék konfigurasi, sakumaha temporal, nya éta bakal otomatis adaptasi jeung sagala lokalitas dibikeun tur nganggo format bener. tanggal const = Temporal.Now.instant();

Const formatOptions = { bulan: 'numeric', dinten: 'numeric', taun: 'numerik' };

console.log(date.toLocaleString('en-US', formatOptions)); // 2/22/2026

console.log(date.toLocaleString('en-GB', formatOptions)); // 22/02/2026

Itungan tanggal Dina seueur aplikasi, anjeun kedah ngalakukeun sababaraha itungan dina tanggal hiji. Anjeun panginten hoyong nambihan atanapi ngirangan unit waktos (poé, jam, detik, jsb.). Contona, upami anjeun gaduh tanggal ayeuna, anjeun panginten hoyong nunjukkeun ka pangguna tanggal 1 minggu ti ayeuna. Objék momen gaduh padika sapertos tambihan sareng pangurangan anu ngalaksanakeun operasi ieu. Fungsi ieu nyandak nilai sareng unit, contona: tambihan (7, 'poé'). Hiji bédana anu kacida pentingna antara Momen jeung Temporal, kumaha oge, nyaeta nalika ngalakukeun itungan titimangsa ieu, objék dasarna dirobah sarta nilai aslina leungit. const ayeuna = moment();

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

const nextWeek = now.add(7, 'poé'); console.log(Minggu hareup); // Momen<2026-03-03T20:08:36-05:00>

// Gotcha - objék aslina ieu mutated console.log (ayeuna); // Momen<2026-03-03T20:08:36-05:00>

Pikeun ngahindarkeun kaleungitan tanggal aslina, anjeun tiasa nyauran clone dina obyek Moment pikeun nyiptakeun salinan. const ayeuna= momen(); const nextWeek = now.clone().add(7, 'poé');

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

console.log(Minggu hareup); // Momen<2026-03-03T20:12:55-05:00>

Di sisi séjén, objék Temporal anu immutable. Sakali anjeun parantos nyiptakeun obyék sapertos Instant, PlainDate, sareng saterasna, nilai objék éta moal pernah robih. Objék temporal ogé mibanda métode tambah jeung ngurangan. Temporal téh rada picky ngeunaan mana unit waktu bisa ditambahkeun kana jenis objék. Contona, anjeun teu bisa nambahkeun poé ka Instan:

const ayeuna = Temporal.Now.instant(); const NextWeek = now.add({dinten: 7}); // RangeError: Kasalahan temporal: Unit pangbadagna teu bisa mangrupa Unit tanggal

Ieu kusabab objék Instan ngagambarkeun titik husus dina waktu dina UTC sarta kalénder-agnostik. Kusabab lilana hiji poe bisa robah dumasar kana aturan zona waktu kayaning Daylight Saving Time, itungan ieu teu sadia dina instan. Anjeun tiasa kitu, ngalakukeun operasi ieu dina tipe séjén objék, kayaning a PlainDateTime: const ayeuna = Temporal.Now.plainDateTimeISO(); console.log (now.toLocaleString ()); // 2/24/2026, 20:23:59

const NextWeek = now.add({dinten: 7});

// Catet yén PlainDateTime aslina tetep unchanged console.log (now.toLocaleString ()); // 2/24/2026, 20:23:59

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

Anjeun oge bisa ngitung sabaraha waktos antara dua Momen atanapi Temporal objék. Kalayan fungsi diff Moment, anjeun kedah nyayogikeun unit pikeun granularitas, upami henteu éta bakal ngabalikeun bédana dina milliseconds. 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, 'poé')); // 1

Jang ngalampahkeun ieu kalawan objék Temporal, Anjeun bisa lulus objék Temporal sejen ka na dugi atanapi saprak métode. Ieu mulih obyek Temporal.Duration ngandung émbaran ngeunaan bédana waktos. Obyék Duration miboga sipat pikeun tiap komponén bédana, sarta ogé bisa ngahasilkeun string durasi ISO 8601 ngalambangkeun bédana waktu.

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

// largestUnit nangtukeun unit pangbadagna waktu keur ngagambarkeun // dina itungan durasi const diff = date2. saprak (date1, {Unit panggedéna: 'dinten'});

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

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

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

console.log (diff.toString ()); // P1DT1H30M // (string durasi ISO 8601: 1 dinten, 1 jam, 30 menit)

Ngabandingkeun Kaping Jeung Waktos Momen sareng Temporal duanana ngantep anjeun ngabandingkeun tanggal sareng waktos pikeun nangtukeun mana anu sateuacanna, tapi nyandak pendekatan anu béda sareng API. Moment nyayogikeun metode sapertos isBefore, isAfter, sareng isSame pikeun ngabandingkeun dua objék Moment. const date1 = moment ('2026-02-21T09:00:00'); const date2 = moment ('2026-02-22T10:30:00');

console.log(date1.isBefore(date2)); // leres

Temporal ngagunakeun métode ngabandingkeun statik pikeun ngalakukeun ngabandingkeun antara dua objék tina tipe sarua. Ieu mulih -1 lamun tanggal kahiji datang saméméh kadua, 0 lamun maranehna sarua, atawa 1 lamun tanggal kahiji datang sanggeus kadua. Conto di handap ieu nunjukkeun kumaha ngabandingkeun dua objék PlainDate. Duanana argumen pikeun Temporal.PlainDate.compare kudu objék PlainDate.

const date1 = Temporal.PlainDate.from({taun: 2026, bulan: 2, poé: 24}); const date2 = Temporal.PlainDate.from({taun: 2026, bulan: 3, poé: 24});

// date1 asalna saméméh date2, jadi -1 console.log (Temporal.PlainDate.compare (date1, date2));

// Kasalahan lamun urang nyoba ngabandingkeun dua objék tina tipena béda console.log (Temporal.PlainDate.compare (date1, Temporal.Now.instant ())); // TypeError: Kasalahan temporal: Widang PlainDate teu sah disadiakeun.

Khususna, ieu ngagampangkeun pikeun nyortir sakumpulan objék Temporal sacara kronologis. // Asép Sunandar Sunarya Temporal.PlainDate objék kaping const = [...];

// pamakéan Temporal.PlainDate.compare salaku fungsi comparator dates.sort (Temporal.PlainDate.compare);

Konversi Zona Waktu Perpustakaan Momen inti henteu ngadukung konvérsi zona waktos. Upami anjeun peryogi fungsionalitas ieu, anjeun ogé kedah masang pakét zona waktos-momen. pakét ieu teu tangkal-shakable, sarta ku kituna bisa nambahan nyata kana ukuran kebat Anjeun. Sakali anjeun parantos masang zona waktos waktos, anjeun tiasa ngarobih objék Momen ka zona waktos anu béda kalayan metode tz. Sapertos operasi Moment anu sanés, ieu mutasi dasarnaobjék. // Anggap waktos Wétan AS const ayeuna = moment(); console.log (ayeuna); // Momen<2026-02-28T20:08:20-05:00>

// Ngarobah kana waktos Pasifik. // Waktu Wétan aslina leungit. now.tz('Amérika/Los_Angeles'); console.log (ayeuna); // Momen<2026-02-28T17:08:20-08:00>

Fungsionalitas zona waktos diwangun kana API Temporal nalika nganggo objek Temporal.ZonedDateTime. Objék ieu ngawengku métode withTimeZone nu mulih ZonedDateTime anyar ngalambangkeun momen anu sarua dina jangka waktu, tapi dina zone waktu nu ditangtukeun. // Deui, asumsina waktos Wétan AS const ayeuna = Temporal.Now.zonedDateTimeISO(); console.log (now.toLocaleString ()); // 2/28/2026, 20:12:02 EST

// Ngarobah kana waktos Pasifik const nowPacific = now.withTimeZone('Amérika/Los_Angeles'); console.log (nowPacific.toLocaleString ()); // 2/28/2026, 5:12:02 PM PST

// objék aslina tetep unchanged console.log (now.toLocaleString ()); // 2/28/2026, 20:12:02 EST

Catetan: Nilai-nilai anu diformat dipulangkeun ku toLocaleString, sakumaha nami nunjukkeun, gumantung kana lokal. Kode sampel dikembangkeun dina lokal en-AS, jadi formatna saperti kieu: 2/28/2026, 5:12:02 PM PST. Dina lokal sejen, ieu bisa jadi béda. Salaku conto, dina lokal en-GB, anjeun bakal nampi sapertos 28/2/2026, 17:12:02 GMT-8. A Refactoring Real-dunya Anggap urang nuju ngawangun aplikasi pikeun ngajadwalkeun acara dina zona waktos. Bagian tina aplikasi ieu mangrupikeun fungsi, getEventTimes, anu nyandak senar ISO 8601 anu ngagambarkeun waktos sareng tanggal kajadian, zona waktos lokal, sareng zona waktos target. Fungsina nyiptakeun senar waktos sareng tanggal anu diformat pikeun acara dina dua zona waktos. Upami fungsina dipasihan senar input anu sanés waktos / titimangsa anu valid, éta bakal ngalungkeun kasalahan. Ieu palaksanaan aslina, ngagunakeun Momen (ogé merlukeun pamakéan pakét moment-zona).

impor moment ti 'moment-timezone';

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

// 1. Jieun momen awal dina zona waktu pamaké const eventTime = moment.tz( inputString, moment.ISO_8601, // Nyangka hiji ISO 8601 string leres, // parsing ketat pamakéTimeZone );

// Buang kasalahan lamun inputString teu ngagambarkeun tanggal valid lamun (!eventTime.isValid()) { buang Kasalahan anyar ( 'Input tanggal / waktos teu valid'); }

// 2. Ngitung waktu sasaran // Kritis: Urang kudu clone, atawa 'eventTime' robah salawasna! const targetTime = eventTime.clone().tz(targetTimeZone);

balik { lokal: eventTime.format(timeFormat), target: targetTime.format(timeFormat), }; }

jadwal const = getEventTimes( '2026-03-05T15:00-05:00', 'Amérika/New_York', 'Éropa/London', );

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

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

Dina conto ieu, urang nuju ngagunakeun format tanggal ekspektasi ISO 8601, nu mantuan diwangun kana Momen. Kami ogé nganggo parsing anu ketat, anu hartosna Moment moal nyobian nebak sareng string tanggal anu henteu cocog sareng formatna. Lamun string tanggal non-ISO diliwatan, eta bakal ngakibatkeun hiji objek tanggal teu valid, sarta kami buang kasalahan. Palaksanaan Temporal Sigana sarupa, tapi boga sababaraha béda konci.

fungsi getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. Parse input langsung kana instan, lajeng nyieun // a ZonedDateTime di zona pamaké. const instan = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);

// 2. Ngarobah kana zona sasaran // Ieu otomatis mulih objék NEW; 'EventTime' aman. const targetTime = eventTime.withTimeZone(targetTimeZone);

// 3. Format nganggo Intl (built-in) pilihan const = { taun: 'numerik', bulan: 'pondok', dinten: 'numeric', jam: 'numeric', menit: '2-angka', kadua: '2-angka', TimeZoneName: 'pondok' };

balik { lokal: eventTime.toLocaleString(navigator.language, pilihan), target: targetTime.toLocaleString(navigator.language, pilihan) }; }

jadwal const = getEventTimes( '2026-03-05T15:00-05:00', 'Amérika/New_York', 'Éropa/London', );

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

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

Kalayan Momen, urang kedah sacara eksplisit netepkeun format string pikeun string tanggal anu dihasilkeun. Henteu paduli lokasi atanapi lokal pangguna, waktos acara bakal salawasna diformat janten 5 Mar 2026, 3:00:00pm EST. Ogé, urang teu kudu eksplisit buang iwal. Lamun string teu valid disalurkeun ka Temporal.Instant.from, Temporal bakal buang iwal pikeun urang. Hiji hal anu kedah diperhatoskeun nyaéta sanaos ku parsing anu ketat, versi Moment masih langkung santai. Temporal merlukeun zona waktu offset di ahir string. Anjeun oge kudu dicatet yén saprak urang nuju ngagunakeun navigator.language, kode ieu ngan bakal dijalankeun dina lingkungan browser, sabab navigator teu diartikeun dina lingkungan Node.js. Palaksanaan Temporal ngagunakeun lokal browser urang ayeuna (navigator.language), jadi pamaké bakal otomatis meunang kali acara formatna dina format waktu lokal maranéhanana. Dina lokal en-AS, ieu 5 Mar 2026, 15:00 EST. Nanging, upami pangguna aya di London, contona, waktos acara bakal diformat janten 5 Mar 2026, 15:00:00 GMT-5. Ringkesan

Aksi Momen.js Samentara Waktos ayeuna momen() Temporal.Now.zonedDateTimeISO() Parsing ISO momen (str) Temporal.Instant.ti(str) Tambahkeun waktos .add(7, 'poé') (mutasi) .add({dinten: 7}) (obyek anyar) Bédana .diff(lain, 'jam') .saprak (lain).jam Zona waktu .tz('Zona/Ngaran') .withTimeZone('Zona/Ngaran')

Dina glance kahiji, bédana bisa jadi rada béda (jeung dina kasus Temporal, kadang leuwih verbose tur leuwih ketat) sintaksis, tapi aya sababaraha kaunggulan konci ngagunakeun Temporal leuwih Moment.js:

Janten langkung eksplisit hartosna langkung sakedik kejutan sareng bug anu teu dihaja. Momen sigana sigana langkung santai, tapi kalebet "tebakan," anu sakapeung tiasa nyababkeun tanggal anu salah. Lamun masihan Temporal hal teu valid, throws kasalahan. Upami kodena jalan, anjeun terang anjeun ngagaduhan tanggal anu sah. Moment tiasa nambihan ukuran anu signifikan kana bungkusan aplikasi, khususna upami anjeun nganggo pakét zona waktos. Temporal nambihan nanaon (sakali éta dikirimkeun dina panyungsi udagan anjeun). Immutability masihan anjeun kayakinan yén anjeun moal pernah leungit atanapi nimpa data nalika ngalaksanakeun konversi sareng operasi tanggal. Répréséntasi béda waktu (instan, PlainDateTime, ZonedDateTime) gumantung kana sasuai ka nu Anjeun, dimana Momen sok wrapper sabudeureun hiji timestamp UTC. Temporal nganggo API Intl pikeun pormat tanggal, anu hartosna anjeun tiasa gaduh pormat sadar lokal tanpa kedah sacara eksplisit netepkeun token.

Catetan Dina Polyfill Salaku disebutkeun tadi, aya hiji polyfill Temporal sadia, disebarkeun salaku pakét npm ngaranna @js-temporal/polyfill. Upami anjeun hoyong nganggo Temporal ayeuna, anjeun peryogi polyfill ieu pikeun ngadukung browser sapertos Safari anu henteu acan ngirimkeun API. Warta anu goréng nyaéta yén éta bakal nambihan ukuran bungkusan anjeun. Warta anu saé nyaéta yén éta masih nambahan sacara signifikan kirang tina momen atanapi zona waktos. Ieu ngabandingkeun ukuran bungkusan sapertos dilaporkeun ku Bundlephobia.com, situs wéb anu nampilkeun inpormasi ngeunaan ukuran pakét npm (klik unggal nami pakét pikeun ningali analisa Bundlephobia):

Bungkusan Dileutikan Minified & gzipped @js-temporal/polyfill 154,1 kB 44,1 kB momen 294,4 kB 75,4 kB zona waktos 1 MB 114,2 kB

Polyfill ogé sajarahna ngagaduhan sababaraha masalah kinerja ngeunaan panggunaan mémori, sareng dina waktos nyerat, éta dianggap dina kaayaan alfa. Kusabab ieu, anjeun panginten henteu hoyong dianggo dina produksi dugi ka ngahontal kaayaan anu langkung dewasa. Warta alus sejenna nyaeta mudahan polyfill moal diperlukeun leuwih lila (iwal mun perlu ngarojong browser heubeul, tangtosna). Dina waktos nyerat, Temporal parantos dikirim dina Chrome, Edge, sareng Firefox. Éta henteu acan siap di Safari, sanaos sigana sayogi kalayan bandéra runtime dina Téknologi Preview panganyarna.

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free