ເກືອບທຸກປະເພດຂອງແອັບພລິເຄຊັນທີ່ຂຽນໃນ JavaScript ເຮັດວຽກກັບເວລາຫຼືວັນທີໃນຄວາມສາມາດບາງຢ່າງ. ໃນຕອນເລີ່ມຕົ້ນ, ອັນນີ້ຖືກຈຳກັດໃສ່ໃນ Date API. API ນີ້ປະກອບມີການທໍາງານພື້ນຖານ, ແຕ່ຂ້ອນຂ້າງຈໍາກັດໃນສິ່ງທີ່ມັນສາມາດເຮັດໄດ້. ຫ້ອງສະຫມຸດພາກສ່ວນທີສາມເຊັ່ນ Moment.js, ແລະຕໍ່ມາໃນ APIs ເຊັ່ນ Intl APIs ແລະ Temporal API ໃຫມ່, ເພີ່ມຄວາມຍືດຫຍຸ່ນຫຼາຍກວ່າເກົ່າໃນການເຮັດວຽກກັບເວລາແລະວັນທີ. ການເພີ່ມຂຶ້ນຂອງແລະຫຼຸດລົງຂອງ Moment.js Moment.js ເປັນຫ້ອງສະໝຸດ JavaScript ທີ່ມີເຄື່ອງໃຊ້ທີ່ມີປະສິດທິພາບໃນການເຮັດວຽກກັບເວລາ ແລະວັນທີ. ມັນປະກອບມີຄຸນສົມບັດທີ່ຂາດຫາຍໄປຈາກ Date API ພື້ນຖານ, ເຊັ່ນ: ການຈັດການເຂດເວລາ, ແລະເຮັດໃຫ້ການໃຊ້ງານທົ່ວໄປຫຼາຍງ່າຍຂຶ້ນ. Moment ຍັງປະກອບມີຟັງຊັນສໍາລັບການຈັດຮູບແບບວັນທີແລະເວລາ. ມັນໄດ້ກາຍເປັນຫ້ອງສະຫມຸດທີ່ໃຊ້ຢ່າງກວ້າງຂວາງໃນຄໍາຮ້ອງສະຫມັກທີ່ແຕກຕ່າງກັນຫຼາຍ. ຢ່າງໃດກໍຕາມ, Moment ຍັງມີສ່ວນແບ່ງຂອງບັນຫາ. ມັນເປັນຫ້ອງສະຫມຸດຂະຫນາດໃຫຍ່, ແລະສາມາດເພີ່ມຢ່າງຫຼວງຫຼາຍກັບຂະຫນາດມັດຂອງຄໍາຮ້ອງສະຫມັກ. ເນື່ອງຈາກວ່າຫ້ອງສະຫມຸດບໍ່ສະຫນັບສະຫນູນການສັ່ນສະເທືອນຕົ້ນໄມ້ (ຄຸນນະສົມບັດຂອງ bundlers ທີ່ທັນສະໄຫມທີ່ສາມາດເອົາພາກສ່ວນທີ່ບໍ່ໄດ້ໃຊ້ຂອງຫ້ອງສະຫມຸດ), ຫໍສະຫມຸດ Moment ທັງຫມົດແມ່ນລວມເຖິງວ່າທ່ານພຽງແຕ່ໃຊ້ຫນຶ່ງຫຼືສອງຫນ້າທີ່ຂອງມັນ. ບັນຫາອື່ນກັບ Moment ແມ່ນຄວາມຈິງທີ່ວ່າວັດຖຸທີ່ມັນສ້າງແມ່ນສາມາດປ່ຽນໄດ້. ການເອີ້ນຟັງຊັນສະເພາະກ່ຽວກັບວັດຖຸ Moment ມີຜົນກະທົບຂ້າງຄຽງ ແລະປ່ຽນແປງມູນຄ່າຂອງວັດຖຸນັ້ນ. ນີ້ສາມາດນໍາໄປສູ່ພຶດຕິກໍາທີ່ບໍ່ຄາດຄິດຫຼືແມງໄມ້. ໃນປີ 2020, ຜູ້ຮັກສາ Moment ໄດ້ຕັດສິນໃຈເອົາຫ້ອງສະຫມຸດເຂົ້າໄປໃນຮູບແບບການບໍາລຸງຮັກສາ. ບໍ່ມີການພັດທະນາຄຸນສົມບັດໃຫມ່, ແລະຜູ້ຮັກສາແນະນໍາໃຫ້ໃຊ້ມັນສໍາລັບໂຄງການໃຫມ່. ມີຫ້ອງສະຫມຸດວັນທີ JavaScript ອື່ນໆ, ເຊັ່ນ: date-fns, ແຕ່ມີຜູ້ຫຼິ້ນໃຫມ່ຢູ່ໃນຕົວເມືອງ, API ທີ່ສ້າງຂຶ້ນໂດຍກົງໃນ JavaScript: Temporal. ມັນເປັນມາດຕະຖານໃຫມ່ທີ່ຕື່ມຂໍ້ມູນໃສ່ໃນຮູຂອງ Date API ຕົ້ນສະບັບເຊັ່ນດຽວກັນກັບການແກ້ໄຂບາງຂໍ້ຈໍາກັດທີ່ພົບເຫັນຢູ່ໃນ Moment ແລະຫ້ອງສະຫມຸດອື່ນໆ. Temporal ແມ່ນຫຍັງ? Temporal ແມ່ນ API ເວລາແລະວັນທີໃຫມ່ທີ່ຖືກເພີ່ມເຂົ້າໃນມາດຕະຖານ ECMAScript, ເຊິ່ງກໍານົດ JavaScript ທີ່ທັນສະໄຫມ. ມາຮອດເດືອນມີນາ 20266, ມັນໄດ້ບັນລຸຂັ້ນຕອນທີ 4 ຂອງຂະບວນການ TC39 (ຄະນະກໍາມະການທີ່ເບິ່ງແຍງການສະເຫນີແລະການເພີ່ມພາສາ JavaScript), ແລະຈະຖືກລວມເຂົ້າໃນຂໍ້ກໍານົດຂອງ ECMAScript ສະບັບຕໍ່ໄປ. ມັນໄດ້ຖືກປະຕິບັດແລ້ວໃນຕົວທ່ອງເວັບຈໍານວນຫນຶ່ງ: Chrome 144+ ແລະ Firefox 139+, ໂດຍ Safari ຄາດວ່າຈະປະຕິບັດຕາມໃນໄວໆນີ້. polyfill ຍັງມີໃຫ້ສໍາລັບຕົວທ່ອງເວັບທີ່ບໍ່ສະຫນັບສະຫນູນແລະ Node.js. Temporal API ສ້າງວັດຖຸທີ່, ໂດຍທົ່ວໄປແລ້ວ, ເປັນຕົວແທນຂອງຊ່ວງເວລາ. ເຫຼົ່ານີ້ສາມາດເປັນສະແຕມເຕັມເວລາແລະວັນທີຢູ່ໃນເຂດເວລາທີ່ກໍານົດໄວ້, ຫຼືພວກເຂົາສາມາດເປັນຕົວຢ່າງທົ່ວໄປຂອງ "ໂມງຕິດຝາ" ໂດຍບໍ່ມີຂໍ້ມູນເຂດເວລາຫຼືວັນທີ. ບາງລັກສະນະຕົ້ນຕໍຂອງ Temporal ປະກອບມີ:

ເວລາທີ່ມີ ຫຼືບໍ່ມີວັນທີ.A ວັດຖຸຊົ່ວຄາວສາມາດສະແດງເຖິງເວລາສະເພາະໃນວັນທີສະເພາະ, ຫຼືເວລາທີ່ບໍ່ມີຂໍ້ມູນວັນທີໃດໆ. ວັນທີສະເພາະ, ໂດຍບໍ່ມີເວລາ, ຍັງສາມາດເປັນຕົວແທນໄດ້. ຮອງຮັບເຂດເວລາ. ວັດຖຸຊົ່ວຄາວແມ່ນຮູ້ເຂດເວລາຢ່າງຄົບຖ້ວນ ແລະສາມາດປ່ຽນໄດ້ໃນທົ່ວເຂດເວລາຕ່າງໆ. Moment ຮອງຮັບເຂດເວລາເຊັ່ນກັນ, ແຕ່ມັນຕ້ອງການຫ້ອງສະໝຸດຊ່ວງເວລາເພີ່ມເຕີມ. Immutability.ເມື່ອວັດຖຸຊົ່ວຄາວຖືກສ້າງຂຶ້ນ, ມັນບໍ່ສາມາດປ່ຽນແປງໄດ້. ການແປງເລກເລກເວລາ ຫຼືເຂດເວລາບໍ່ໄດ້ດັດແປງວັດຖຸທີ່ຢູ່ເບື້ອງຫຼັງ. ແທນທີ່ຈະ, ພວກເຂົາສ້າງວັດຖຸ Temporal ໃໝ່. 1-based indexing.A ແຫຼ່ງທົ່ວໄປຂອງແມງໄມ້ທີ່ມີ Date API (ເຊັ່ນດຽວກັນກັບ Moment) ແມ່ນວ່າເດືອນແມ່ນສູນດັດສະນີ. ນີ້ຫມາຍຄວາມວ່າເດືອນມັງກອນແມ່ນເດືອນ 0, ແທນທີ່ຈະເປັນເດືອນ 1 ດັ່ງທີ່ພວກເຮົາທຸກຄົນເຂົ້າໃຈໃນຊີວິດຈິງ. ການ​ແກ້​ໄຂ​ຊົ່ວ​ຄາວ​ໂດຍ​ການ​ນໍາ​ໃຊ້ 1-based indexing — ເດືອນ​ມັງ​ກອນ​ແມ່ນ​ເດືອນ 1​. ມັນຖືກສ້າງຂຶ້ນໃນຕົວທ່ອງເວັບ. ເນື່ອງຈາກ Temporal ເປັນ API ໃນຕົວທ່ອງເວັບຂອງມັນເອງ, ມັນບໍ່ເພີ່ມຫຍັງກັບຂະຫນາດມັດຂອງແອັບພລິເຄຊັນຂອງທ່ານ.

ມັນຍັງມີຄວາມສໍາຄັນທີ່ຈະສັງເກດວ່າ Date API ຈະບໍ່ຫາຍໄປ. ໃນຂະນະທີ່ Temporal ແທນທີ່ API ນີ້, ມັນບໍ່ໄດ້ຖືກເອົາອອກ ຫຼື ປະຕິເສດ. ຫຼາຍໆແອັບພລິເຄຊັນຈະແຕກຖ້າຕົວທ່ອງເວັບເອົາ Date API ອອກຢ່າງກະທັນຫັນ. ຢ່າງໃດກໍ່ຕາມ, ຍັງຈື່ໄວ້ວ່າປັດຈຸບັນຖືກພິຈາລະນາເປັນໂຄງການມໍລະດົກໃນຮູບແບບການບໍາລຸງຮັກສາ. ໃນສ່ວນທີ່ເຫຼືອຂອງບົດຄວາມ, ພວກເຮົາຈະເບິ່ງບາງ "ສູດ" ສໍາລັບການເຄື່ອນຍ້າຍລະຫັດ Moment-based ກັບ Temporal API ໃຫມ່. ມາ​ເລີ່ມ​ການ​ປັບ​ປຸງ​! ການສ້າງວັນທີແລະເວລາວັດຖຸ ກ່ອນທີ່ພວກເຮົາສາມາດຈັດການວັນທີແລະເວລາ, ພວກເຮົາຕ້ອງສ້າງວັດຖຸທີ່ເປັນຕົວແທນຂອງພວກມັນ. ເພື່ອສ້າງວັດຖຸ Moment ທີ່ເປັນຕົວແທນຂອງວັນທີ ແລະເວລາປັດຈຸບັນ, ໃຫ້ໃຊ້ຟັງຊັນປັດຈຸບັນ. const now = ປັດຈຸບັນ(); console.log(ດຽວນີ້); // ເວລາ<2026-02-18T21:26:29-05:00>

ຕອນນີ້ວັດຖຸນີ້ສາມາດຖືກຈັດຮູບແບບ ຫຼື ໝູນໃຊ້ໄດ້ຕາມຄວາມຕ້ອງການ.

// ປ່ຽນເປັນ UTC //ຄໍາເຕືອນ: ອັນນີ້ປ່ຽນວັດຖຸ Moment ແລະເຮັດໃຫ້ມັນຢູ່ໃນໂຫມດ UTC! console.log(now.utc()); // Moment<2026-02-19T02:26:29Z>

// ພິມສະຕຣິງທີ່ມີຮູບແບບ - ສັງເກດວ່າມັນກໍາລັງໃຊ້ເວລາ UTC ໃນປັດຈຸບັນ console.log(now.format('MM/DD/YYYY hh:mm:ss a')); // 02/19/2026 02:27:07 ນ

ສິ່ງທີ່ສໍາຄັນທີ່ຈະຈື່ຈໍາກ່ຽວກັບ Moment ແມ່ນວ່າວັດຖຸ Moment ສະເຫມີປະກອບມີຂໍ້ມູນກ່ຽວກັບເວລາແລະວັນທີ. ຖ້າທ່ານພຽງແຕ່ຕ້ອງການເຮັດວຽກກັບຂໍ້ມູນເວລາ, ນີ້ປົກກະຕິແລ້ວແມ່ນດີ, ແຕ່ມັນສາມາດເຮັດໃຫ້ເກີດພຶດຕິກໍາທີ່ບໍ່ຄາດຄິດໃນສະຖານະການເຊັ່ນ Daylight Saving Time ຫຼືປີ LEAP, ບ່ອນທີ່ວັນທີສາມາດສົ່ງຜົນກະທົບຕໍ່ການຄິດໄລ່ເວລາ. Temporal ແມ່ນມີຄວາມຍືດຫຍຸ່ນຫຼາຍ. ທ່ານສາມາດສ້າງວັດຖຸທີ່ເປັນຕົວແທນຂອງວັນທີແລະເວລາໃນປະຈຸບັນໂດຍການສ້າງວັດຖຸ Temporal.Instant. ນີ້ສະແດງເຖິງຈຸດເວລາທີ່ກໍານົດໂດຍເວລານັບຕັ້ງແຕ່ "ຍຸກ" (ເວລາທ່ຽງຄືນ UTC ວັນທີ 1 ມັງກອນ 1970). Temporal ສາມາດອ້າງອີງທັນທີທັນໃດນີ້ໃນເວລາທີ່ມີຄວາມແມ່ນຍໍາລະດັບ nanosecond. const now = Temporal.Now.instant();

// ເບິ່ງ nanoseconds ດິບນັບຕັ້ງແຕ່ epoch console.log(now.epochNanoseconds); // 1771466342612000000n

// ຮູບແບບ UTC console.log(now.toString()); // 2026-02-19T01:55:27.844Z

// ຮູບແບບສໍາລັບເຂດເວລາສະເພາະ console.log(now.toString({ timeZone: 'America/New_York' })); // 2026-02-18T20:56:57.905-05:00

ວັດຖຸ Temporal.Instant ຍັງສາມາດສ້າງສໍາລັບເວລາແລະວັນທີສະເພາະໂດຍການນໍາໃຊ້ວິທີການຈາກ static.

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

// Format the instant ໃນເຂດເວລາທ້ອງຖິ່ນ. ໃຫ້ສັງເກດວ່ານີ້ພຽງແຕ່ຄວບຄຸມ // ການຈັດຮູບແບບ - ມັນບໍ່ໄດ້ປ່ຽນວັດຖຸຄືກັບ moment.utc ເຮັດ. console.log(myInstant.toString({ timeZone: 'America/New_York' })); // 2026-02-18T21:10:00-05:00

ທ່ານຍັງສາມາດສ້າງວັດຖຸ Temporal ປະເພດອື່ນໆ, ລວມທັງ:

Temporal.PlainDate: ວັນທີທີ່ບໍ່ມີຂໍ້ມູນເວລາ. Temporal.PlainTime: ເວລາທີ່ບໍ່ມີຂໍ້ມູນວັນທີ. Temporal.ZonedDateTime: ວັນທີ ແລະເວລາໃນເຂດເວລາສະເພາະ.

ແຕ່ລະອັນມີວິທີການຈາກທີ່ສາມາດໄດ້ຮັບການເອີ້ນດ້ວຍວັດຖຸທີ່ລະບຸວັນທີ ແລະ/ຫຼືເວລາ, ຫຼືສະຕຣິງວັນທີເພື່ອວິເຄາະ. // ພຽງແຕ່ວັນທີ const today = Temporal.PlainDate.from({ ປີ: 2026, ເດືອນ: 2, // ສັງເກດວ່າພວກເຮົາກໍາລັງໃຊ້ 2 ສໍາລັບເດືອນກຸມພາ ມື້: 18 }); console.log(today.toString()); // 2026-02-18

// ພຽງແຕ່ເວລາ const lunchTime = Temporal.PlainTime.from({ ຊົ່ວໂມງ: 12 }); console.log(lunchTime.toString()); // 12:00:00

// ວັນທີ ແລະເວລາໃນເຂດເວລາຕາເວັນອອກຂອງສະຫະລັດ const dueAt = Temporal.ZonedDateTime.from({ ເຂດເວລາ: 'America/New_York', ປີ: 2026, ເດືອນ: 3, ມື້: 1, ຊົ່ວໂມງ: 12, ນາທີ: 0, ທີສອງ: 0 }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[America/New_York]

ການແຍກວິເຄາະ ພວກເຮົາໄດ້ກວມເອົາການສ້າງໂຄງການຂອງຂໍ້ມູນວັນທີ ແລະເວລາ. ບັດ​ນີ້​ໃຫ້​ເຮົາ​ມາ​ເບິ່ງ​ການ​ວິ​ເຄາະ. Parsing ເປັນພື້ນທີ່ໜຶ່ງທີ່ Moment ມີຄວາມຍືດຫຍຸ່ນຫຼາຍກວ່າ Temporal API ທີ່ມີໃນຕົວ. ທ່ານສາມາດວິເຄາະສະຕຣິງວັນທີໂດຍການສົ່ງມັນໄປຫາຟັງຊັນປັດຈຸບັນ. ດ້ວຍການໂຕ້ຖຽງດຽວ, Moment ຄາດວ່າຈະມີສະຕຣິງວັນທີ ISO, ແຕ່ທ່ານສາມາດນໍາໃຊ້ຮູບແບບທາງເລືອກຖ້າທ່ານສະຫນອງການໂຕ້ຖຽງທີສອງທີ່ລະບຸຮູບແບບວັນທີທີ່ຖືກນໍາໃຊ້.

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); // ເວລາ<2026-02-21T09:00:00-05:00>

console.log(formattedDate); // ເວລາ<2026-02-21T09:00:00-05:00>

ໃນເວີຊັນເກົ່າກວ່າ, Moment ຈະເຮັດໃຫ້ການຄາດເດົາທີ່ດີທີ່ສຸດເພື່ອວິເຄາະສະຕຣິງວັນທີທີ່ຈັດຮູບແບບຕາມໃຈມັກ. ນີ້ສາມາດນໍາໄປສູ່ຜົນໄດ້ຮັບທີ່ບໍ່ສາມາດຄາດເດົາໄດ້. ຕົວຢ່າງ, ແມ່ນ 02-03-2026 ກຸມພາ 2 ຫຼື 3 ມີນາ? ດ້ວຍເຫດຜົນນີ້, ລຸ້ນໃໝ່ຂອງ Moment ຈະສະແດງຄຳເຕືອນການຫຼຸດລາຄາທີ່ໂດດເດັ່ນຖ້າມັນຖືກເອີ້ນໂດຍບໍ່ມີສະຕຣິງວັນທີທີ່ມີຮູບແບບ ISO (ເວັ້ນເສຍແຕ່ວ່າການໂຕ້ຖຽງທີສອງກັບຮູບແບບທີ່ຕ້ອງການແມ່ນໃຫ້). Temporal ຈະວິເຄາະສະເພາະສະຕຣິງວັນທີທີ່ມີຮູບແບບສະເພາະເທົ່ານັ້ນ. ສະຕຣິງຕ້ອງສອດຄ່ອງກັບຮູບແບບ ISO 8601 ຫຼືສ່ວນຂະຫຍາຍຂອງມັນ, RFC 9557. ຖ້າສະຕຣິງວັນທີທີ່ບໍ່ສອດຄ່ອງຖືກສົ່ງຜ່ານໄປຫາວິທີການຈາກ, Temporal ຈະຖິ້ມ RangeError.

// ໃຊ້ 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

// ໃຊ້ສະຕຣິງວັນທີທີ່ບໍ່ຮູ້ຈັກ const otherDate = Temporal.Instant.from('2/21/26 9:00:00'); // RangeError: Temporal error: Invalid character while parsing year value.

ຄວາມຕ້ອງການທີ່ແນ່ນອນຂອງສະຕຣິງວັນທີແມ່ນຂຶ້ນກັບປະເພດຂອງວັດຖຸ Temporal ທີ່ທ່ານກໍາລັງສ້າງ. ໃນຕົວຢ່າງຂ້າງເທິງ, Temporal.Instant ຕ້ອງການ ISO ເຕັມສະຕຣິງວັນທີ 8601 ຫຼື RFC 9557 ທີ່ລະບຸວັນທີ ແລະເວລາດ້ວຍການຊົດເຊີຍເຂດເວລາ, ແຕ່ທ່ານຍັງສາມາດສ້າງວັດຖຸ PlainDate ຫຼື PlainTime ໂດຍໃຊ້ພຽງແຕ່ຊຸດຍ່ອຍຂອງຮູບແບບວັນທີ. 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

ຈົ່ງຈື່ໄວ້ວ່າສະຕຣິງເຫຼົ່ານີ້ຍັງຕ້ອງປະຕິບັດຕາມຮູບແບບທີ່ຄາດໄວ້, ຫຼືຄວາມຜິດພາດຈະຖືກຖິ້ມ.

// ໃຊ້ສະຕຣິງເວລາທີ່ບໍ່ປະຕິບັດຕາມ. ທັງໝົດນີ້ຈະຖິ້ມ RangeError. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00AM');

Pro tip: ການຈັດການສະຕຣິງທີ່ບໍ່ແມ່ນ ISO ເນື່ອງຈາກວ່າ Temporal ບູລິມະສິດຄວາມໜ້າເຊື່ອຖື, ມັນຈະບໍ່ພະຍາຍາມເດົາຮູບແບບຂອງສະຕຣິງເຊັ່ນ: 02-01-2026. ຖ້າແຫຼ່ງຂໍ້ມູນຂອງທ່ານໃຊ້ສະຕຣິງດັ່ງກ່າວ, ທ່ານຈະຕ້ອງເຮັດການຈັດການສະຕຣິງບາງຢ່າງເພື່ອຈັດລຽງຄ່າຕ່າງໆເປັນສະຕຣິງ ISO ເຊັ່ນ: 2026-02-01 ກ່ອນທີ່ຈະພະຍາຍາມໃຊ້ມັນກັບ Temporal.

ການຈັດຮູບແບບ ເມື່ອທ່ານມີ Moment ຫຼື Temporal object, ທ່ານອາດຈະຕ້ອງການປ່ຽນມັນເປັນສະຕຣິງທີ່ມີຮູບແບບໃນບາງຈຸດ. ນີ້ແມ່ນຕົວຢ່າງທີ່ Moment ມີຄວາມເຄັ່ງຕຶງຫຼາຍ. ທ່ານໂທຫາວິທີການຮູບແບບຂອງວັດຖຸດ້ວຍສາຍຂອງ tokens ທີ່ອະທິບາຍຮູບແບບວັນທີທີ່ຕ້ອງການ. const date = ປັດຈຸບັນ();

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

console.log(date.format('MMMM Do YYYY, h:mm:ss a')); // ວັນທີ 22 ກຸມພາ 2026, 08:18:30 ໂມງ

ໃນອີກດ້ານຫນຶ່ງ, Temporal ຮຽກຮ້ອງໃຫ້ທ່ານເປັນ verbose ເລັກນ້ອຍ. ວັດຖຸຊົ່ວຄາວ, ເຊັ່ນ Instant, ມີວິທີການ toLocaleString ທີ່ຍອມຮັບຕົວເລືອກການຈັດຮູບແບບຕ່າງໆທີ່ລະບຸໄວ້ເປັນຄຸນສົມບັດຂອງວັດຖຸ.

const date = Temporal.Now.instant();

// ບໍ່ມີການໂຕ້ຖຽງ, ພວກເຮົາຈະໄດ້ຮັບຮູບແບບເລີ່ມຕົ້ນສໍາລັບທ້ອງຖິ່ນໃນປະຈຸບັນ console.log(date.toLocaleString()); // 2/22/2026, 08:23:36 PM (ສົມມຸດເປັນທ້ອງຖິ່ນຂອງ en-US)

// ຜ່ານທາງເລືອກການຈັດຮູບແບບເພື່ອສ້າງສະຕຣິງຮູບແບບທີ່ກໍາຫນົດເອງ console.log(date.toLocaleString('en-US', { ເດືອນ: 'ຍາວ', ມື້: 'ຕົວເລກ', ປີ: 'ຕົວເລກ', ຊົ່ວໂມງ: '2 ຕົວເລກ', ນາທີ: '2 ຕົວເລກ' })); // ວັນທີ 22 ກຸມພາ 2026 ເວລາ 20:23 ໂມງ

// ພຽງແຕ່ຜ່ານທົ່ງນາທີ່ທ່ານຕ້ອງການໃນຮູບແບບສະຕຣິງ console.log(date.toLocaleString('en-US', { ເດືອນ: 'ສັ້ນ', ມື້: 'ຕົວເລກ' })); // 22 ກຸມພາ

ການຈັດຮູບແບບວັນທີຊົ່ວຄາວໃຊ້ API Intl.DateTimeFormat (ເຊິ່ງມີຢູ່ແລ້ວໃນຕົວທ່ອງເວັບທີ່ທັນສະໄຫມ) ພາຍໃຕ້ຝາປິດ. ນັ້ນ ໝາຍ ຄວາມວ່າທ່ານສາມາດສ້າງວັດຖຸ DateTimeFormat ທີ່ສາມາດ ນຳ ໃຊ້ຄືນໄດ້ດ້ວຍຕົວເລືອກການຈັດຮູບແບບທີ່ ກຳ ນົດເອງ, ຈາກນັ້ນສົ່ງວັດຖຸຊົ່ວຄາວໄປຫາວິທີການຮູບແບບຂອງມັນ. ດ້ວຍເຫດນີ້, ມັນບໍ່ຮອງຮັບຮູບແບບວັນທີແບບກຳນົດເອງຄືກັບ Moment. ຖ້າທ່ານຕ້ອງການບາງສິ່ງບາງຢ່າງເຊັ່ນ 'Q1 2026' ຫຼືຮູບແບບພິເສດອື່ນໆ, ທ່ານອາດຈະຕ້ອງການລະຫັດການຈັດຮູບແບບວັນທີທີ່ກໍານົດເອງຫຼືໄປຫາຫ້ອງສະຫມຸດພາກສ່ວນທີສາມ. const formatter = new Intl.DateTimeFormat('en-US', { ເດືອນ: '2 ຕົວເລກ', ມື້: '2 ຕົວເລກ', ປີ: 'ຕົວເລກ' });

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

Tokens ການຈັດຮູບແບບຂອງ Moment ແມ່ນຂຽນງ່າຍກວ່າ, ແຕ່ພວກມັນບໍ່ເປັນມິດກັບທ້ອງຖິ່ນ. ຮູບແບບສະຕຣິງ "ລະຫັດຍາກ" ສິ່ງຕ່າງໆເຊັ່ນຄໍາສັ່ງເດືອນ / ມື້. ປະໂຫຍດຂອງການໃຊ້ວັດຖຸການຕັ້ງຄ່າ, ດັ່ງທີ່ Temporal ເຮັດ, ແມ່ນວ່າມັນຈະປັບຕົວເຂົ້າກັບທ້ອງຖິ່ນໃດ ໜຶ່ງ ໂດຍອັດຕະໂນມັດແລະໃຊ້ຮູບແບບທີ່ຖືກຕ້ອງ. const date = Temporal.Now.instant();

const formatOptions = { ເດືອນ: 'ຕົວເລກ', ມື້: 'ຕົວເລກ', ປີ: 'ຕົວເລກ' };

console.log(date.toLocaleString('en-US', formatOptions)); // ວັນທີ 22/2/2026

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

ການ​ຄິດ​ໄລ່​ວັນ​ທີ​ ໃນຫຼາຍໆຄໍາຮ້ອງສະຫມັກ, ທ່ານຈະຕ້ອງສິ້ນສຸດການຄິດໄລ່ບາງຢ່າງໃນວັນທີ. ທ່ານອາດຈະຕ້ອງການເພີ່ມຫຼືລົບຫນ່ວຍເວລາ (ມື້, ຊົ່ວໂມງ, ວິນາທີ, ແລະອື່ນໆ). ຕົວຢ່າງ: ຖ້າທ່ານມີວັນທີປະຈຸບັນ, ທ່ານອາດຈະຕ້ອງການສະແດງໃຫ້ຜູ້ໃຊ້ເຫັນວັນທີ 1 ອາທິດຈາກນີ້. ວັດຖຸປັດຈຸບັນມີວິທີການເຊັ່ນ: ຕື່ມ ແລະລົບທີ່ປະຕິບັດການເຫຼົ່ານີ້. ຟັງຊັນເຫຼົ່ານີ້ໃຊ້ຄ່າ ແລະຫົວໜ່ວຍ, ຕົວຢ່າງ: add(7, 'days'). ຄວາມແຕກຕ່າງທີ່ ສຳ ຄັນຫຼາຍລະຫວ່າງ Moment ແລະ Temporal, ຢ່າງໃດກໍຕາມ, ແມ່ນວ່າເມື່ອປະຕິບັດການຄິດໄລ່ວັນທີເຫຼົ່ານີ້, ວັດຖຸທີ່ຕິດພັນໄດ້ຖືກດັດແປງແລະມູນຄ່າຕົ້ນສະບັບຂອງມັນສູນເສຍໄປ. const now = ປັດຈຸບັນ();

console.log(ດຽວນີ້); // ເວລາ<2026-02-24T20:08:36-05:00>

const nextWeek = now.add(7, 'ມື້'); console.log(nextWeek); // ເວລາ<2026-03-03T20:08:36-05:00>

// Gotcha - ວັດຖຸຕົ້ນສະບັບໄດ້ຖືກກາຍພັນ console.log(ດຽວນີ້); // ເວລາ<2026-03-03T20:08:36-05:00>

ເພື່ອຫຼີກເວັ້ນການສູນເສຍວັນທີຕົ້ນສະບັບ, ທ່ານສາມາດໂທຫາ clone ໃນ Moment object ເພື່ອສ້າງສໍາເນົາ. const ໃນປັດຈຸບັນ= moment(); const nextWeek = now.clone().add(7, 'days');

console.log(ດຽວນີ້); // ເວລາ<2026-02-24T20:12:55-05:00>

console.log(nextWeek); // ເວລາ<2026-03-03T20:12:55-05:00>

ໃນທາງກົງກັນຂ້າມ, ວັດຖຸຊົ່ວຄາວແມ່ນບໍ່ສາມາດປ່ຽນແປງໄດ້. ເມື່ອທ່ານສ້າງວັດຖຸເຊັ່ນ Instant, PlainDate, ແລະອື່ນໆ, ຄ່າຂອງວັດຖຸນັ້ນຈະບໍ່ປ່ຽນແປງ. ວັດຖຸຊົ່ວຄາວຍັງມີວິທີການບວກແລະລົບ. Temporal ເປັນເລື່ອງເລັກນ້ອຍກ່ຽວກັບວ່າໜ່ວຍເວລາໃດສາມາດເພີ່ມໃສ່ວັດຖຸປະເພດໃດແດ່. ຕົວຢ່າງ, ທ່ານບໍ່ສາມາດເພີ່ມມື້ໃສ່ Instant ໄດ້:

const now = Temporal.Now.instant(); const nextWeek = now.add({ days: 7 }); // RangeError: Temporal error: ຫນ່ວຍງານທີ່ໃຫຍ່ທີ່ສຸດບໍ່ສາມາດເປັນຫນ່ວຍວັນທີ

ນີ້ແມ່ນຍ້ອນວ່າ Instant objects ເປັນຕົວແທນຂອງຈຸດສະເພາະໃນເວລາໃນ UTC ແລະເປັນປະຕິທິນແບບບໍ່ເຊື່ອຟັງ. ເນື່ອງຈາກວ່າໄລຍະເວລາຂອງມື້ສາມາດປ່ຽນແປງໄດ້ໂດຍອີງໃສ່ກົດລະບຽບເຂດເວລາເຊັ່ນ: ເວລາປະຫຍັດແສງກາງເວັນ, ການຄິດໄລ່ນີ້ບໍ່ສາມາດໃຊ້ໄດ້ໃນທັນທີ. ຢ່າງໃດກໍຕາມ, ທ່ານສາມາດປະຕິບັດການນີ້ໃນປະເພດຂອງວັດຖຸອື່ນໆ, ເຊັ່ນ: PlainDateTime: const now = Temporal.Now.plainDateTimeISO(); console.log(now.toLocaleString()); // 2/24/2026, 8:23:59 ໂມງແລງ

const nextWeek = now.add({ days: 7 });

// ໃຫ້ສັງເກດວ່າ PlainDateTime ຕົ້ນສະບັບຍັງຄົງບໍ່ປ່ຽນແປງ console.log(now.toLocaleString()); // 2/24/2026, 8:23:59 ໂມງແລງ

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

ນອກນັ້ນທ່ານຍັງສາມາດຄິດໄລ່ເວລາຫຼາຍປານໃດລະຫວ່າງສອງ Moment ຫຼື Temporal object. ດ້ວຍຟັງຊັນຄວາມແຕກຕ່າງຂອງ Moment, ທ່ານຈໍາເປັນຕ້ອງໃຫ້ຫນ່ວຍງານສໍາລັບ granularity, ຖ້າບໍ່ດັ່ງນັ້ນມັນຈະສົ່ງຄືນຄວາມແຕກຕ່າງໃນ 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, 'days')); // 1

ເພື່ອເຮັດສິ່ງນີ້ກັບວັດຖຸ Temporal, ທ່ານສາມາດສົ່ງວັດຖຸ Temporal ອື່ນໄປຫາວິທີການຂອງມັນຈົນກ່ວາຫຼືນັບຕັ້ງແຕ່. ນີ້ສົ່ງຄືນວັດຖຸ Temporal.Duration ທີ່ມີຂໍ້ມູນກ່ຽວກັບຄວາມແຕກຕ່າງຂອງເວລາ. ວັດຖຸໄລຍະເວລາມີຄຸນສົມບັດສໍາລັບແຕ່ລະອົງປະກອບຂອງຄວາມແຕກຕ່າງ, ແລະຍັງສາມາດສ້າງສະຕຣິງໄລຍະເວລາ ISO 8601 ທີ່ເປັນຕົວແທນຂອງຄວາມແຕກຕ່າງຂອງເວລາ.

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

// biggestUnit ກໍານົດຫົວຫນ່ວຍທີ່ໃຫຍ່ທີ່ສຸດຂອງເວລາທີ່ຈະເປັນຕົວແທນ // ໃນການຄິດໄລ່ໄລຍະເວລາ const diff = date2.since(date1, { biggestUnit: 'day' });

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

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

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

console.log(diff.toString()); // P1DT1H30M // (ISO 8601 ໄລຍະເວລາ: 1 ມື້, 1 ຊົ່ວໂມງ, 30 ນາທີ)

ປຽບທຽບວັນທີ ແລະເວລາ Moment ແລະ Temporal ທັງສອງຊ່ວຍໃຫ້ທ່ານປຽບທຽບວັນທີແລະເວລາເພື່ອກໍານົດວ່າອັນໃດມາກ່ອນ, ແຕ່ໃຊ້ວິທີການທີ່ແຕກຕ່າງກັນກັບ API. Moment ໃຫ້ວິທີການເຊັ່ນ isBefore, isAfter, ແລະ isSame ເພື່ອປຽບທຽບສອງວັດຖຸ Moment. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');

console.log(date1.isBefore(date2)); // ຈິງ

Temporal ໃຊ້ວິທີການປຽບທຽບແບບຄົງທີ່ເພື່ອເຮັດການປຽບທຽບລະຫວ່າງສອງວັດຖຸຂອງປະເພດດຽວກັນ. ມັນກັບຄືນ -1 ຖ້າວັນທີທໍາອິດມາກ່ອນທີສອງ, 0 ຖ້າພວກເຂົາເທົ່າກັບ, ຫຼື 1 ຖ້າວັນທີທໍາອິດມາຫຼັງຈາກທີສອງ. ຕົວຢ່າງຕໍ່ໄປນີ້ສະແດງໃຫ້ເຫັນວິທີການປຽບທຽບສອງວັດຖຸ PlainDate. ທັງສອງອາກິວເມັນກັບ Temporal.PlainDate.compare ຈະຕ້ອງເປັນວັດຖຸທີ່ເປັນ PlainDate.

const date1 = Temporal.PlainDate.from({ ປີ: 2026, ເດືອນ: 2, ມື້: 24 }); const date2 = Temporal.PlainDate.from({ ປີ: 2026, ເດືອນ: 3, ມື້: 24 });

// date1 ມາກ່ອນວັນທີ2, ດັ່ງນັ້ນ -1 console.log(Temporal.PlainDate.compare(date1, date2));

// ຜິດພາດຖ້າພວກເຮົາພະຍາຍາມປຽບທຽບສອງວັດຖຸຂອງປະເພດທີ່ແຕກຕ່າງກັນ console.log(Temporal.PlainDate.compare(date1, Temporal.Now.instant())); // TypeError: Temporal error: Invalid PlainDate fields provide.

ໂດຍສະເພາະ, ນີ້ເຮັດໃຫ້ມັນງ່າຍທີ່ຈະຈັດຮຽງ array ຂອງ Temporal objects ຕາມລໍາດັບ. // ອາເຣຂອງວັດຖຸ Temporal.PlainDate const dates = [... ];

// ໃຊ້ Temporal.PlainDate.compare ເປັນຟັງຊັນປຽບທຽບ dates.sort(Temporal.PlainDate.compare);

ການປ່ຽນແປງເຂດເວລາ ຫ້ອງສະໝຸດ Moment ຫຼັກບໍ່ຮອງຮັບການປ່ຽນເຂດເວລາ. ຖ້າທ່ານຕ້ອງການຟັງຊັນນີ້, ທ່ານກໍ່ຕ້ອງຕິດຕັ້ງຊຸດເຂດເວລາ. ຊຸດນີ້ບໍ່ສາມາດສັ່ນໄດ້, ແລະດັ່ງນັ້ນຈຶ່ງສາມາດເພີ່ມຂະຫນາດມັດຂອງທ່ານຢ່າງຫຼວງຫຼາຍ. ເມື່ອທ່ານຕິດຕັ້ງຊ່ວງເວລາ, ທ່ານສາມາດປ່ຽນວັດຖຸຊ່ວງເວລາເປັນເຂດເວລາທີ່ແຕກຕ່າງກັນດ້ວຍວິທີການ tz. ເຊັ່ນດຽວກັນກັບການດໍາເນີນງານ Moment ອື່ນໆ, ນີ້ຈະປ່ຽນແປງພື້ນຖານວັດຖຸ. // ສົມມຸດເວລາພາກຕາເວັນອອກຂອງສະຫະລັດ const now = ປັດຈຸບັນ(); console.log(ດຽວນີ້); // ເວລາ<2026-02-28T20:08:20-05:00>

// ປ່ຽນເປັນເວລາປາຊີຟິກ. // ເວລາຕາເວັນອອກເດີມແມ່ນສູນເສຍ. now.tz('America/Los_Angeles'); console.log(ດຽວນີ້); // ເວລາ<2026-02-28T17:08:20-08:00>

ຟັງຊັນເຂດເວລາແມ່ນສ້າງຂຶ້ນໃນ Temporal API ເມື່ອໃຊ້ວັດຖຸ Temporal.ZonedDateTime. ວັດຖຸເຫຼົ່ານີ້ລວມມີວິທີການ withTimeZone ທີ່ສົ່ງຄືນ ZonedDateTime ໃໝ່ທີ່ເປັນຕົວແທນຂອງຊ່ວງເວລາດຽວກັນ, ແຕ່ຢູ່ໃນເຂດເວລາທີ່ກໍານົດໄວ້. // ອີກເທື່ອຫນຶ່ງ, ສົມມຸດວ່າເວລາພາກຕາເວັນອອກຂອງສະຫະລັດ const now = Temporal.Now.zonedDateTimeISO(); console.log(now.toLocaleString()); // 2/28/2026, 8:12:02 PM EST

// ປ່ຽນເປັນເວລາປາຊີຟິກ const nowPacific = now.withTimeZone('America/Los_Angeles'); console.log(nowPacific.toLocaleString()); // 2/28/2026, 5:12:02 PM PST

// ວັດຖຸເດີມຍັງບໍ່ປ່ຽນແປງ console.log(now.toLocaleString()); // 2/28/2026, 8:12:02 PM EST

ຫມາຍ​ເຫດ​: ຄ່າ​ທີ່​ໄດ້​ຮັບ​ການ​ຈັດ​ຮູບ​ແບບ​ກັບ​ຄືນ​ໄປ​ບ່ອນ​ໂດຍ​ການ LocalString ແມ່ນ​, ເປັນ​ຊື່​ຫມາຍ​ຄວາມ​ວ່າ​, ອີງ​ຕາມ​ທ້ອງ​ຖິ່ນ​. ລະຫັດຕົວຢ່າງໄດ້ຖືກພັດທະນາຢູ່ໃນທ້ອງຖິ່ນ en-US, ສະນັ້ນຮູບແບບແມ່ນຄ້າຍຄືນີ້: 2/28/2026, 17:12:02 PM PST. ຢູ່ໃນທ້ອງຖິ່ນອື່ນ, ນີ້ອາດຈະແຕກຕ່າງກັນ. ຕົວຢ່າງ, ຢູ່ໃນທ້ອງຖິ່ນ en-GB, ທ່ານຈະໄດ້ຮັບບາງສິ່ງບາງຢ່າງເຊັ່ນ: 28/2/2026, 17:12:02 GMT-8. A reactoring ໂລກ​ທີ່​ແທ້​ຈິງ​ ສົມມຸດວ່າພວກເຮົາກຳລັງສ້າງແອັບເພື່ອກຳນົດເວລາເຫດການໃນທົ່ວເຂດເວລາ. ສ່ວນຫນຶ່ງຂອງແອັບນີ້ແມ່ນຟັງຊັນ, getEventTimes, ເຊິ່ງໃຊ້ສະຕຣິງ ISO 8601 ເປັນຕົວແທນຂອງເວລາແລະວັນທີຂອງເຫດການ, ເຂດເວລາທ້ອງຖິ່ນ, ແລະເຂດເວລາເປົ້າຫມາຍ. ຟັງຊັນສ້າງສະຕຣິງເວລາ ແລະວັນທີທີ່ມີຮູບແບບສໍາລັບເຫດການໃນທັງສອງເຂດເວລາ. ຖ້າຟັງຊັນແມ່ນໃຫ້ສະຕຣິງປ້ອນຂໍ້ມູນທີ່ບໍ່ແມ່ນສະຕຣິງເວລາ/ວັນທີທີ່ຖືກຕ້ອງ, ມັນຈະເກີດຄວາມຜິດພາດ. ນີ້ແມ່ນການຈັດຕັ້ງປະຕິບັດຕົ້ນສະບັບ, ໂດຍໃຊ້ Moment (ຍັງຕ້ອງໃຊ້ແພັກເກັດຊ່ວງເວລາ).

ນໍາເຂົ້າປັດຈຸບັນຈາກ 'moment-timezone';

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

// 1. ສ້າງຊ່ວງເວລາເບື້ອງຕົ້ນໃນເຂດເວລາຂອງຜູ້ໃຊ້ const eventTime = moment.tz( inputString, moment.ISO_8601, // ຄາດການສະຕຣິງ ISO 8601 true, // ການແຍກວິເຄາະຢ່າງເຂັ້ມງວດ userTimeZone );

// ຖິ້ມຄວາມຜິດພາດຖ້າ inputString ບໍ່ໄດ້ເປັນຕົວແທນຂອງວັນທີທີ່ຖືກຕ້ອງ ຖ້າ (!eventTime.isValid()) { ຖິ້ມຂໍ້ຜິດພາດໃຫມ່('ການປ້ອນຂໍ້ມູນວັນທີ/ເວລາບໍ່ຖືກຕ້ອງ'); }

// 2. ຄິດໄລ່ເວລາເປົ້າໝາຍ // CRITICAL: ພວກເຮົາຕ້ອງ clone, ຫຼື 'eventTime' ປ່ຽນແປງຕະຫຼອດໄປ! const targetTime = eventTime.clone().tz(targetTimeZone);

ກັບຄືນ { ທ້ອງຖິ່ນ: eventTime.format(timeFormat), ເປົ້າໝາຍ: targetTime.format(timeFormat), }; }

const ຕາຕະລາງ = getEventTimes( '2026-03-05T15:00-05:00', 'ອາເມລິກາ/ນິວ_ຢອກ', 'ເອີຣົບ/ລອນດອນ', );

console.log(schedule.local); // ວັນທີ 5 ມີນາ 2026, 3:00:00 ໂມງ EST

console.log(schedule.target); // ວັນທີ 5 ມີນາ 2026, 8:00:00 ໂມງ GMT

ໃນຕົວຢ່າງນີ້, ພວກເຮົາກໍາລັງໃຊ້ຮູບແບບວັນທີທີ່ຄາດໄວ້ຂອງ ISO 8601, ເຊິ່ງຊ່ວຍສ້າງຢູ່ໃນ Moment. ພວກເຮົາຍັງໃຊ້ການວິເຄາະຢ່າງເຂັ້ມງວດ, ຊຶ່ງຫມາຍຄວາມວ່າ Moment ຈະບໍ່ພະຍາຍາມເດົາດ້ວຍຂໍ້ຄວາມວັນທີທີ່ບໍ່ກົງກັບຮູບແບບ. ຖ້າສະຕຣິງວັນທີທີ່ບໍ່ແມ່ນ ISO ຖືກຜ່ານ, ມັນຈະສົ່ງຜົນໃຫ້ວັດຖຸວັນທີທີ່ບໍ່ຖືກຕ້ອງ, ແລະພວກເຮົາຖິ້ມຄວາມຜິດພາດ. ການປະຕິບັດຊົ່ວຄາວມີລັກສະນະຄ້າຍຄືກັນ, ແຕ່ມີຄວາມແຕກຕ່າງທີ່ສໍາຄັນຈໍານວນຫນຶ່ງ.

function getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. Parse the input ໂດຍກົງເຂົ້າໄປໃນ Instant, ຫຼັງຈາກນັ້ນສ້າງ // a ZonedDateTime ໃນເຂດຂອງຜູ້ໃຊ້. const instant = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);

// 2. ປ່ຽນເປັນເຂດເປົ້າໝາຍ // ນີ້ອັດຕະໂນມັດສົ່ງຄືນວັດຖຸໃຫມ່; 'eventTime' ແມ່ນປອດໄພ. const targetTime = eventTime.withTimeZone(targetTimeZone);

// 3. Format ໂດຍໃຊ້ Intl (built-in) ຕົວເລືອກ const = { ປີ: 'ຕົວເລກ', ເດືອນ: 'ສັ້ນ', ມື້: 'ຕົວເລກ', ຊົ່ວໂມງ: 'ຕົວເລກ', ນາທີ: '2 ຕົວເລກ', ທີສອງ: '2 ຕົວເລກ', TimeZoneName: 'ສັ້ນ' };

ກັບຄືນ { ທ້ອງຖິ່ນ: eventTime.toLocaleString(navigator.language, options), ເປົ້າໝາຍ: targetTime.toLocaleString(navigator.language, options) }; }

const ຕາຕະລາງ = getEventTimes( '2026-03-05T15:00-05:00', 'ອາເມລິກາ/ນິວ_ຢອກ', 'ເອີຣົບ/ລອນດອນ', );

console.log(schedule.local); // ວັນທີ 5 ມີນາ 2026, 15:00:00 ໂມງແລງ EST

console.log(schedule.target); // ວັນທີ 5 ມີນາ 2026, 8:00:00 ໂມງແລງ GMT

ດ້ວຍ Moment, ພວກເຮົາຕ້ອງລະບຸຢ່າງຈະແຈ້ງສະຕຣິງຮູບແບບສໍາລັບສະຕຣິງວັນທີຜົນໄດ້ຮັບ. ໂດຍບໍ່ຄໍານຶງເຖິງສະຖານທີ່ຂອງຜູ້ໃຊ້ຫຼືທ້ອງຖິ່ນ, ເວລານັດໝາຍຈະຖືກຈັດຮູບແບບເປັນວັນທີ 5 ມີນາ 2026, 3:00:00 ໂມງ.ໂມງແລງ EST. ນອກຈາກນັ້ນ, ພວກເຮົາບໍ່ ຈຳ ເປັນຕ້ອງຖິ້ມຂໍ້ຍົກເວັ້ນຢ່າງຈະແຈ້ງ. ຖ້າສະຕຣິງທີ່ບໍ່ຖືກຕ້ອງຖືກສົ່ງກັບ Temporal.Instant.from, Temporal ຈະຖິ້ມຂໍ້ຍົກເວັ້ນໃຫ້ກັບພວກເຮົາ. ສິ່ງຫນຶ່ງທີ່ຄວນສັງເກດແມ່ນວ່າເຖິງແມ່ນວ່າມີການວິເຄາະຢ່າງເຂັ້ມງວດ, ສະບັບ Moment ແມ່ນຍັງອ່ອນກວ່າ. Temporal ຕ້ອງການການຊົດເຊີຍເຂດເວລາຢູ່ທ້າຍສະຕຣິງ. ທ່ານຍັງຄວນສັງເກດວ່ານັບຕັ້ງແຕ່ພວກເຮົາກໍາລັງໃຊ້ navigator.language, ລະຫັດນີ້ຈະດໍາເນີນການພຽງແຕ່ໃນສະພາບແວດລ້ອມຂອງຕົວທ່ອງເວັບ, ເນື່ອງຈາກວ່າ navigator ບໍ່ໄດ້ຖືກກໍານົດໄວ້ໃນສະພາບແວດລ້ອມ Node.js. ການປະຕິບັດຊົ່ວຄາວໃຊ້ສະຖານທີ່ປະຈຸບັນຂອງຕົວທ່ອງເວັບ (navigator.language), ດັ່ງນັ້ນຜູ້ໃຊ້ຈະໄດ້ຮັບເວລາເຫດການອັດຕະໂນມັດໃນຮູບແບບເວລາທ້ອງຖິ່ນຂອງພວກເຂົາ. ຢູ່ໃນທ້ອງຖິ່ນຂອງສະຫະລັດ, ນີ້ແມ່ນວັນທີ 5 ມີນາ 2026, 15:00:00 ໂມງແລງ EST. ຢ່າງໃດກໍຕາມ, ຖ້າຜູ້ໃຊ້ຢູ່ໃນລອນດອນ, ຕົວຢ່າງ, ເວລາເຫດການຈະຖືກຈັດຮູບແບບເປັນ 5 ມີນາ 2026, 15:00:00 GMT-5. ສະຫຼຸບ

ການປະຕິບັດ Moment.js ຊົ່ວຄາວ ເວລາປະຈຸບັນ ປັດ​ຈຸ​ບັນ () Temporal.Now.zonedDateTimeISO() ກຳລັງວິເຄາະ ISO moment(str) Temporal.Instant.from(str) ເພີ່ມເວລາ .add(7, 'ມື້') (ປ່ຽນ) .add({ມື້: 7 }) (ວັດຖຸໃໝ່) ຄວາມແຕກຕ່າງ .diff(ອື່ນໆ, 'ຊົ່ວໂມງ') .ຕັ້ງແຕ່(ອື່ນໆ).ຊົ່ວໂມງ ເຂດເວລາ .tz('ເຂດ/ຊື່') .withTimeZone('ເຂດ/ຊື່')

ຢູ່ glance ທໍາອິດ, ຄວາມແຕກຕ່າງອາດຈະແຕກຕ່າງກັນເລັກນ້ອຍ (ແລະໃນກໍລະນີຂອງ Temporal, ບາງຄັ້ງ syntax verbose ຫຼາຍແລະເຄັ່ງຄັດກວ່າ), ແຕ່ມີຂໍ້ດີທີ່ສໍາຄັນຫຼາຍທີ່ຈະໃຊ້ Temporal over Moment.js:

ມີຄວາມຊັດເຈນຫຼາຍຂຶ້ນໝາຍເຖິງຄວາມແປກໃຈໜ້ອຍລົງ ແລະແມງໄມ້ທີ່ບໍ່ໄດ້ຕັ້ງໃຈ. ຊ່ວງເວລາອາດຈະມີຄວາມອ່ອນເພຍຫຼາຍ, ແຕ່ມັນກ່ຽວຂ້ອງກັບ "ການຄາດເດົາ", ເຊິ່ງບາງຄັ້ງສາມາດສົ່ງຜົນໃຫ້ວັນທີທີ່ບໍ່ຖືກຕ້ອງ. ຖ້າທ່ານໃຫ້ Temporal ບາງສິ່ງບາງຢ່າງທີ່ບໍ່ຖືກຕ້ອງ, ມັນຈະເຮັດໃຫ້ເກີດຄວາມຜິດພາດ. ຖ້າລະຫັດເຮັດວຽກ, ທ່ານຮູ້ວ່າທ່ານມີວັນທີທີ່ຖືກຕ້ອງ. Moment ສາມາດເພີ່ມຂະຫນາດທີ່ສໍາຄັນໃຫ້ກັບຊຸດຂອງແອັບພລິເຄຊັນ, ໂດຍສະເພາະຖ້າທ່ານໃຊ້ຊຸດຊ່ວງເວລາ. Temporal ບໍ່ເພີ່ມຫຍັງ (ເມື່ອມັນຖືກຈັດສົ່ງໃນຕົວທ່ອງເວັບເປົ້າຫມາຍຂອງທ່ານ). Immutability ເຮັດ​ໃຫ້​ທ່ານ​ມີ​ຄວາມ​ຫມັ້ນ​ໃຈ​ວ່າ​ທ່ານ​ຈະ​ບໍ່​ມີ​ການ​ສູນ​ເສຍ​ຫຼື​ຂຽນ​ທັບ​ຂໍ້​ມູນ​ໃນ​ເວ​ລາ​ທີ່​ປະ​ຕິ​ບັດ​ການ​ປ່ຽນ​ແປງ​ວັນ​ທີ​ແລະ​ການ​ດໍາ​ເນີນ​ງານ​. ການເປັນຕົວແທນຂອງເວລາທີ່ແຕກຕ່າງກັນ (Instant, PlainDateTime, ZonedDateTime) ຂຶ້ນກັບຄວາມຕ້ອງການຂອງເຈົ້າ, ບ່ອນທີ່ Moment ສະເຫມີເປັນ wrapper ປະມານເວລາ UTC. Temporal ໃຊ້ Intl APIs ສໍາລັບການຈັດຮູບແບບວັນທີ, ຊຶ່ງຫມາຍຄວາມວ່າທ່ານສາມາດມີຮູບແບບທີ່ຮູ້ຈັກກັບທ້ອງຖິ່ນໂດຍບໍ່ຈໍາເປັນຕ້ອງກໍານົດ tokens ຢ່າງຊັດເຈນ.

ຫມາຍເຫດກ່ຽວກັບ Polyfill ດັ່ງທີ່ໄດ້ກ່າວມາກ່ອນຫນ້ານີ້, ມີ Temporal polyfill ທີ່ມີຢູ່, ແຈກຢາຍເປັນຊຸດ npm ທີ່ມີຊື່ວ່າ @js-temporal/polyfill. ຖ້າທ່ານຕ້ອງການໃຊ້ Temporal ໃນມື້ນີ້, ທ່ານຈະຕ້ອງການ polyfill ນີ້ເພື່ອສະຫນັບສະຫນູນຕົວທ່ອງເວັບເຊັ່ນ Safari ທີ່ຍັງບໍ່ໄດ້ສົ່ງ API ເທື່ອ. ຂ່າວບໍ່ດີກັບນີ້ແມ່ນວ່າມັນຈະເພີ່ມຂະຫນາດມັດຂອງທ່ານ. ຂ່າວດີແມ່ນວ່າມັນຍັງເພີ່ມຫນ້ອຍກວ່າຊ່ວງເວລາຫຼືຊ່ວງເວລາ. ນີ້ແມ່ນການປຽບທຽບຂອງຂະຫນາດມັດຕາມລາຍງານໂດຍ Bundlephobia.com, ເວັບໄຊທ໌ທີ່ນໍາສະເຫນີຂໍ້ມູນກ່ຽວກັບຂະຫນາດແພັກເກັດ npm (ຄລິກໃສ່ແຕ່ລະຊື່ແພັກເກັດເພື່ອເບິ່ງການວິເຄາະ Bundlephobia):

ຊຸດ ຫຍໍ້ ຫຍໍ້ & gzipped @js-temporal/polyfill 154.1 kB 44.1 kB ປັດຈຸບັນ 294.4 kB 75.4 kB ເຂດເວລາ 1 MB 114.2 kB

polyfill ຍັງມີປະຫວັດສາດກ່ຽວກັບການປະຕິບັດບາງຢ່າງກ່ຽວກັບການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາ, ແລະໃນເວລາຂຽນ, ມັນຖືກພິຈາລະນາຢູ່ໃນສະຖານະ alpha. ເນື່ອງຈາກວ່ານີ້, ທ່ານອາດຈະບໍ່ຕ້ອງການທີ່ຈະນໍາໃຊ້ມັນໃນການຜະລິດຈົນກ່ວາມັນໄປຮອດສະພາບທີ່ໃຫຍ່ກວ່າ. ຂ່າວດີອີກຢ່າງຫນຶ່ງແມ່ນວ່າຫວັງວ່າ polyfill ຈະບໍ່ຈໍາເປັນອີກຕໍ່ໄປ (ເວັ້ນເສຍແຕ່ວ່າທ່ານຈໍາເປັນຕ້ອງສະຫນັບສະຫນູນຕົວທ່ອງເວັບເກົ່າ, ແນ່ນອນ). ໃນເວລາຂຽນ, Temporal ໄດ້ຈັດສົ່ງໃນ Chrome, Edge, ແລະ Firefox. ມັນຍັງບໍ່ພ້ອມໃນ Safari ເທື່ອ, ເຖິງແມ່ນວ່າມັນເບິ່ງຄືວ່າຈະມີໃຫ້ພ້ອມດ້ວຍທຸງ runtime ໃນຕົວຢ່າງຂອງເທກໂນໂລຍີຫລ້າສຸດ.

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