JavaScript-da yozilgan deyarli har qanday dastur ma'lum darajada vaqt yoki sana bilan ishlaydi. Dastlab, bu o'rnatilgan Date API bilan cheklangan edi. Ushbu API asosiy funksiyalarni o'z ichiga oladi, lekin u qila oladigan darajada cheklangan. Moment.js kabi uchinchi tomon kutubxonalari va keyinchalik Intl API va yangi Temporal API kabi oʻrnatilgan APIlar vaqt va sanalar bilan ishlashda ancha moslashuvchanlikni qoʻshadi. Momentning yuksalishi va tushishi.js Moment.js - vaqt va sanalar bilan ishlash uchun kuchli yordamchi dasturlarga ega JavaScript kutubxonasi. U asosiy Date API-ning vaqt mintaqasini boshqarish kabi etishmayotgan xususiyatlarini o'z ichiga oladi va ko'plab umumiy operatsiyalarni soddalashtiradi. Moment sana va vaqtni formatlash funksiyalarini ham o‘z ichiga oladi. U turli xil ilovalarda keng qo'llaniladigan kutubxonaga aylandi. Biroq, Momentning o'ziga xos muammolari ham bor edi. Bu katta kutubxona bo'lib, dastur to'plami hajmini sezilarli darajada oshirishi mumkin. Kutubxona daraxt silkitishni qo'llab-quvvatlamasligi sababli (kutubxonaning foydalanilmagan qismlarini olib tashlashi mumkin bo'lgan zamonaviy bundlerlarning xususiyati), agar siz uning bir yoki ikkita funksiyasidan foydalansangiz ham, butun Moment kutubxonasi kiritilgan. Moment bilan bog'liq yana bir muammo shundaki, u yaratgan ob'ektlar o'zgaruvchan. Moment ob'ektida ma'lum funktsiyalarni chaqirish nojo'ya ta'sirlarga ega va bu ob'ektning qiymatini o'zgartiradi. Bu kutilmagan xatti-harakatlar yoki xatolarga olib kelishi mumkin. 2020 yilda Moment saqlovchilari kutubxonani texnik xizmat ko'rsatish rejimiga o'tkazishga qaror qilishdi. Hech qanday yangi xususiyat ishlab chiqilmaydi va xizmat ko'rsatuvchilar uni yangi loyihalar uchun ishlatishni tavsiya etadilar. JavaScript-ning sana-fns kabi boshqa kutubxonalari mavjud, ammo shaharda yangi o'yinchi bor, to'g'ridan-to'g'ri JavaScript-ga o'rnatilgan API: Temporal. Bu asl Date API-ning teshiklarini to'ldiradigan yangi standart, shuningdek, Moment va boshqa kutubxonalarda mavjud bo'lgan ba'zi cheklovlarni hal qiladi. Vaqtinchalik nima? Temporal - bu zamonaviy JavaScript-ni belgilaydigan ECMAScript standartiga qo'shilayotgan yangi vaqt va sana API. 20266 yil mart oyidan boshlab u TC39 jarayonining 4-bosqichiga (JavaScript tiliga takliflar va qoʻshimchalarni nazorat qiluvchi qoʻmita) yetdi va ECMAScript spetsifikatsiyasining keyingi versiyasiga kiritiladi. U allaqachon bir nechta brauzerlarda qo'llanilgan: Chrome 144+ va Firefox 139+, yaqin orada Safari ham paydo bo'lishi kutilmoqda. Polifill qo'llab-quvvatlanmaydigan brauzerlar va Node.js uchun ham mavjud. Temporal API odatda vaqtni aks ettiruvchi ob'ektlarni yaratadi. Bu ma'lum bir vaqt zonasida to'liq vaqt va sana belgilari bo'lishi mumkin yoki ular vaqt mintaqasi yoki sana ma'lumotlarisiz "devor soati" vaqtining umumiy namunasi bo'lishi mumkin. Temporalning asosiy xususiyatlaridan ba'zilari:

Sana bilan yoki sanasiz vaqtlar. Vaqtinchalik ob'ekt ma'lum bir sanadagi ma'lum vaqtni yoki hech qanday sana ma'lumotisiz vaqtni ko'rsatishi mumkin. Vaqtsiz ma'lum bir sana ham ifodalanishi mumkin. Vaqt mintaqasini qoʻllab-quvvatlash. Vaqtinchalik obʼyektlar vaqt mintaqasidan toʻliq xabardor boʻlib, ularni turli vaqt zonalarida aylantirish mumkin. Moment ham vaqt mintaqalarini qo'llab-quvvatlaydi, lekin u qo'shimcha vaqt mintaqasi kutubxonasini talab qiladi. O'zgarmaslik. Vaqtinchalik ob'ekt yaratilgandan keyin uni o'zgartirib bo'lmaydi. Vaqt arifmetikasi yoki vaqt mintaqasi konvertatsiyalari asosiy ob'ektni o'zgartirmaydi. Buning o'rniga ular yangi Vaqtinchalik ob'ektni yaratadilar. 1-asoslangan indekslash. Date API (shuningdek, Moment bilan) bilan bog'liq xatolarning umumiy manbai oylar nol indekslanganligidir. Bu shuni anglatadiki, yanvar oyi 1-oy emas, balki biz hammamiz real hayotda tushunamiz. Vaqtinchalik buni 1-asosli indeksatsiya yordamida tuzatadi - yanvar - 1 oy. U brauzerga o'rnatilgan. Temporal brauzerning o'zida API bo'lgani uchun u ilovangiz to'plami hajmiga hech narsa qo'shmaydi.

Shuni ham ta'kidlash kerakki, Date API yo'qolmaydi. Vaqtinchalik ushbu API o'rnini egallagan bo'lsa-da, u o'chirilmaydi yoki eskirmaydi. Agar brauzerlar to'satdan Date API-ni o'chirib tashlasa, ko'plab ilovalar buziladi. Biroq, shuni ham yodda tutingki, Moment hozirda texnik xizmat ko'rsatish rejimida eski loyiha hisoblanadi. Maqolaning qolgan qismida biz Moment-ga asoslangan kodni yangi Temporal API-ga o'tkazish uchun ba'zi "retseptlar" ni ko'rib chiqamiz. Refaktoringni boshlaylik! Sana va vaqt obyektlarini yaratish Sana va vaqtlarni o'zgartirishdan oldin ularni ifodalovchi ob'ektlarni yaratishimiz kerak. Joriy sana va vaqtni ifodalovchi Moment obyektini yaratish uchun moment funksiyasidan foydalaning. const now = moment(); console.log(hozir); // Moment<2026-02-18T21:26:29-05:00>

Ushbu ob'ekt endi kerak bo'lganda formatlanishi yoki boshqarilishi mumkin.

// UTC ga aylantiring //Ogohlantirish: Bu Moment ob'ektini o'zgartiradi va uni UTC rejimiga qo'yadi! console.log(now.utc()); // Moment<2026-02-19T02:26:29Z>

// formatlangan satrni chop eting - u hozir UTC vaqtini ishlatayotganiga e'tibor bering console.log(now.format('AA/KK/YYYY hs:dd:ss a')); // 19.02.2026 02:27:07

Moment haqida eslash kerak bo'lgan asosiy narsa shundaki, Moment ob'ekti har doim vaqt va sana haqidagi ma'lumotlarni o'z ichiga oladi. Agar siz faqat vaqt haqidagi ma'lumot bilan ishlashingiz kerak bo'lsa, bu odatda yaxshi, lekin bu sana vaqt hisob-kitoblariga ta'sir qilishi mumkin bo'lgan yozgi vaqt yoki kabisa yillari kabi vaziyatlarda kutilmagan xatti-harakatlarga olib kelishi mumkin. Vaqtinchalik yanada moslashuvchan. Temporal.Instant obyektini yaratish orqali joriy sana va vaqtni ifodalovchi obyekt yaratishingiz mumkin. Bu "davr" dan (1970 yil 1 yanvarda yarim tunda UTC) beri vaqt bilan belgilanadigan vaqtni anglatadi. Temporal bu lahzani nanosoniya darajasidagi aniqlik bilan o'z vaqtida havola qilishi mumkin. const now = Temporal.Now.instant();

// davrdan beri xom nanosekundlarni ko'ring console.log(now.epochNanoseconds); // 1771466342612000000n

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

// muayyan vaqt mintaqasi uchun format console.log(now.toString({zamon zonasi: 'Amerika/New_York' })); // 2026-02-18T20:56:57.905-05:00

Temporal.Instant ob'ektlari, shuningdek, from statik usuli yordamida ma'lum vaqt va sana uchun yaratilishi mumkin.

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

// Mahalliy vaqt mintaqasida lahzani formatlash. Bu faqat nazorat qilishini unutmang // formatlash - moment.utc kabi ob'ektni o'zgartirmaydi. console.log(myInstant.toString({zamon zonasi: 'Amerika/New_York' })); // 2026-02-18T21:10:00-05:00

Vaqtinchalik ob'ektlarning boshqa turlarini ham yaratishingiz mumkin, jumladan:

Temporal.PlainDate: Vaqt ma'lumoti bo'lmagan sana. Temporal.PlainTime: Sana ma'lumoti bo'lmagan vaqt. Temporal.ZonedDateTime: Muayyan vaqt mintaqasidagi sana va vaqt.

Ularning har birida sana va/yoki vaqtni ko'rsatadigan ob'ekt yoki tahlil qilish uchun sana satri bilan chaqirilishi mumkin bo'lgan from usuli mavjud. // Shunchaki sana const today = Temporal.PlainDate.from({ Yil: 2026, oy: 2, // fevral uchun biz 2 dan foydalanayotganimizga e'tibor bering kun: 18 }); console.log(today.toString()); // 2026-02-18

// Faqat bir vaqt const lunchTime = Temporal.PlainTime.from({ soat: 12 }); console.log(lunchTime.toString()); // 12:00:00

// AQShning sharqiy vaqt mintaqasidagi sana va vaqt const dueAt = Temporal.ZonedDateTime.from({ vaqt zonasi: 'Amerika/Nyu_York', Yil: 2026, oy: 3, kun: 1, soat: 12, daqiqa: 0, ikkinchi: 0 }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[Amerika/Nyu_York]

Tahlil qilish Biz sana va vaqt ma'lumotlarini dasturiy yaratishni ko'rib chiqdik. Endi tahlil qilishni ko'rib chiqaylik. Tahlil qilish - Moment o'rnatilgan Temporal API-ga qaraganda moslashuvchanroq sohalardan biridir. Sana satrini moment funksiyasiga o'tkazish orqali tahlil qilishingiz mumkin. Bitta argument bilan Moment ISO sana qatorini kutadi, lekin foydalanilayotgan sana formatini koʻrsatuvchi ikkinchi argumentni taqdim etsangiz, muqobil formatlardan foydalanishingiz mumkin.

const isoDate = moment('2026-02-21T09:00:00'); const formattedDate = moment('21/26 9:00:00', 'M/K/YY h:dd:ss');

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

console.log (formatlangan sana); // Moment<2026-02-21T09:00:00-05:00>

Eski versiyalarda Moment har qanday o'zboshimchalik bilan formatlangan sana qatorini tahlil qilish uchun eng yaxshi taxmin qiladi. Bu oldindan aytib bo'lmaydigan natijalarga olib kelishi mumkin. Misol uchun, 02-03-2026 2-fevralmi yoki 3-martmi? Shu sababli, Moment-ning yangi versiyalarida, agar u ISO formatidagi sana qatorisiz chaqirilgan bo'lsa (agar kerakli formatdagi ikkinchi argument ham berilmagan bo'lsa) e'tibordan chetda qolish haqida ogohlantirishni ko'rsatadi. Temporal faqat maxsus formatlangan sana qatorini tahlil qiladi. Satr ISO 8601 formati yoki uning kengaytmasi RFC 9557 bilan mos kelishi kerak. Agar mos kelmaydigan sana qatori from usuliga uzatilsa, Temporal RangeError beradi.

// RFC 9557 sanasi qatoridan foydalanish const myDate = Temporal.Instant.from('2026-02-21T09:00:00-05:00[Amerika/Nyu_York]'); console.log(myDate.toString({timezone: 'Amerika/New_York' })); // 2026-02-21T09:00:00-05:00

// Noma'lum sana qatoridan foydalanish const otherDate = Temporal.Instant.from('21.2.26 9:00:00'); // RangeError: Vaqtinchalik xato: Yil qiymatini tahlil qilishda noto'g'ri belgi.

Sana qatorining aniq talablari qaysi turdagi Vaqtinchalik ob'ektni yaratayotganingizga bog'liq. Yuqoridagi misolda Temporal.Instant to'liq ISO talab qiladi8601 yoki RFC 9557 sana va vaqtni vaqt mintaqasi ofset bilan belgilovchi sana qatori, lekin siz sana formatining faqat kichik to'plamidan foydalangan holda PlainDate yoki PlainTime obyektlarini ham yaratishingiz mumkin. 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

E'tibor bering, bu satrlar kutilgan formatga mos kelishi kerak, aks holda xatolik yuzaga keladi.

// Mos kelmaydigan vaqt satrlaridan foydalanish. Bularning barchasi RangeError ni keltirib chiqaradi. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00');

Maslahat: ISO bo'lmagan strings bilan ishlash Temporal ishonchlilikni birinchi o'ringa qo'ygani uchun u 02-01-2026 kabi satr formatini taxmin qilishga urinmaydi. Agar ma'lumotlar manbangiz shunday satrlardan foydalansa, uni Temporal bilan ishlatishdan oldin qiymatlarni ISO qatoriga o'zgartirish uchun 2026-02-01 kabi bir qator manipulyatsiyani bajarishingiz kerak bo'ladi.

Formatlash Moment yoki Temporal ob'ektiga ega bo'lganingizdan so'ng, siz uni biron bir nuqtada formatlangan satrga aylantirmoqchi bo'lishingiz mumkin. Bu Moment biroz qisqaroq bo'lgan misol. Ob'ektning formatlash usulini kerakli sana formatini tavsiflovchi belgilar qatori bilan chaqirasiz. konst sana = moment();

console.log(date.format('MM/DD/YYYY')); // 22.02.2026

console.log(date.format('MMMM To YYYY, h:dd:ss a')); // 2026 yil 22 fevral, 20:18:30

Boshqa tomondan, Temporal sizdan biroz batafsilroq bo'lishingizni talab qiladi. Instant kabi vaqtinchalik ob'ektlar toLocaleString usuliga ega bo'lib, u ob'ekt xususiyatlari sifatida ko'rsatilgan turli formatlash opsiyalarini qabul qiladi.

const date = Temporal.Now.instant();

// argumentlarsiz, biz joriy mahalliy til uchun standart formatni olamiz console.log(date.toLocaleString()); // 22.02.2026, 20:23:36 (en-US tilini hisobga olgan holda)

// maxsus format satrini yaratish uchun formatlash parametrlarini o'tkazing console.log(date.toLocaleString('en-US', { oy: "uzoq", kun: "raqamli", yil: "raqamli", soat: '2-raqamli', daqiqa: "2-raqamli" }))) // 2026-yil 22-fevral, soat 20:23

// faqat format satrida kerakli maydonlarni o'tkazing console.log(date.toLocaleString('en-US', { oy: "qisqa", kun: "raqamli" }))) // 22 fevral

Vaqtinchalik sanani formatlash aslida kaput ostida Intl.DateTimeFormat API (zamonaviy brauzerlarda allaqachon mavjud) ishlatadi. Ya'ni, siz o'zingizning shaxsiy formatlash opsiyalaringiz bilan qayta foydalanish mumkin bo'lgan DateTimeFormat ob'ektini yaratishingiz mumkin, so'ngra Temporal ob'ektlarni formatlash usuliga o'tkazishingiz mumkin. Shu sababli, u Moment kabi maxsus sana formatlarini qo'llab-quvvatlamaydi. Agar sizga “2026 yil 1-chorak” yoki boshqa ixtisoslashtirilgan formatlash kerak boʻlsa, sizga maxsus sanani formatlash kodi kerak boʻlishi yoki uchinchi tomon kutubxonasiga murojaat qilishingiz mumkin. const formatter = new Intl.DateTimeFormat('en-US', { oy: '2-raqamli', kun: '2-raqamli', yil: "raqamli" });

const date = Temporal.Now.instant(); console.log(formatator.format(sana)); // 22.02.2026

Moment formatlash belgilarini yozish osonroq, ammo ular mahalliy tilga mos kelmaydi. Format satrlari "qattiq kod" kabi narsalarni oy/kun tartibi. Temporal kabi konfiguratsiya ob'ektidan foydalanishning afzalligi shundaki, u avtomatik ravishda istalgan mahalliy tilga moslashadi va to'g'ri formatdan foydalanadi. const date = Temporal.Now.instant();

const formatOptions = { oy: "raqamli", kun: "raqamli", yil: "raqamli" };

console.log(date.toLocaleString('en-US', formatOptions)); // 22.02.2026

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

Sana hisob-kitoblari Ko'pgina ilovalarda siz sanada ba'zi hisob-kitoblarni bajarishingiz kerak bo'ladi. Vaqt birliklarini (kunlar, soatlar, soniyalar va boshqalar) qo'shish yoki ayirish mumkin. Misol uchun, agar sizda joriy sana bo'lsa, foydalanuvchiga 1 haftadan keyingi sanani ko'rsatishni xohlashingiz mumkin. Moment ob'ektlari ushbu amallarni bajaradigan qo'shish va ayirish kabi usullarga ega. Bu funksiyalar qiymat va birlikni oladi, masalan: add(7, 'days'). Moment va Temporal o'rtasidagi juda muhim farq shundaki, bu sana hisob-kitoblarini bajarishda asosiy ob'ekt o'zgartiriladi va uning asl qiymati yo'qoladi. const now = moment();

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

const nextWeek = now.add(7, 'kunlar'); console.log(keyingi hafta); // Moment<2026-03-03T20:08:36-05:00>

// Gotcha - asl ob'ekt mutatsiyaga uchragan console.log(hozir); // Moment<2026-03-03T20:08:36-05:00>

Asl sanani yo'qotmaslik uchun siz nusxasini yaratish uchun Moment ob'ektidagi klonni chaqirishingiz mumkin. const hozir= moment(); const nextWeek = now.clone().add(7, 'kun');

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

console.log(keyingi hafta); // Moment<2026-03-03T20:12:55-05:00>

Boshqa tomondan, Vaqtinchalik ob'ektlar o'zgarmasdir. Instant, PlainDate va boshqalar kabi ob'ektni yaratganingizdan so'ng, bu ob'ektning qiymati hech qachon o'zgarmaydi. Vaqtinchalik ob'ektlarda qo'shish va ayirish usullari ham mavjud. Vaqtinchalik ob'ekt turlariga qaysi vaqt birliklarini qo'shish mumkinligi haqida bir oz tanlanadi. Masalan, siz bir lahzaga kun qo'sha olmaysiz:

const now = Temporal.Now.instant(); const nextWeek = now.add({ kun: 7}); // RangeError: Vaqtinchalik xato: eng katta birlik sana birligi bo'la olmaydi

Buning sababi shundaki, Instant ob'ektlari UTCda vaqtning ma'lum bir nuqtasini ifodalaydi va kalendar-agnostikdir. Kunning uzunligi yozgi vaqt kabi vaqt mintaqasi qoidalariga qarab oʻzgarishi mumkinligi sababli, bu hisob Instant’da mavjud emas. Biroq, siz ushbu operatsiyani boshqa turdagi ob'ektlarda bajarishingiz mumkin, masalan, PlainDateTime: const now = Temporal.Now.plainDateTimeISO(); console.log(now.toLocaleString()); // 24.02.2026, 20:23:59

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

// Eslatma: Asl PlainDateTime o'zgarishsiz qoladi console.log(now.toLocaleString()); // 24.02.2026, 20:23:59

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

Ikki Moment yoki Vaqtinchalik ob'ektlar o'rtasida qancha vaqt borligini ham hisoblashingiz mumkin. Momentning diff funksiyasi bilan siz granularlik uchun birlikni taqdim etishingiz kerak, aks holda u farqni millisekundlarda qaytaradi. 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(sana1, 'kunlar')); // 1

Buni Temporal ob'ekt bilan amalga oshirish uchun siz boshqa Temporal ob'ektni uning qadar yoki beri usullariga o'tkazishingiz mumkin. Bu vaqt farqi haqidagi ma'lumotlarni o'z ichiga olgan Temporal.Duration obyektini qaytaradi. Duration ob'ekti farqning har bir komponenti uchun xususiyatlarga ega va shuningdek, vaqt farqini ifodalovchi ISO 8601 davomiylik qatorini yaratishi mumkin.

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

// largeUnit ifodalash uchun eng katta vaqt birligini belgilaydi // davomiylikni hisoblashda const diff = date2.since(sana1, {eng kattaBirlik: 'kun'});

console.log(farq.kunlar); // 1

console.log(farq.soatlar); // 1

console.log(farq.daqiqalar); // 30

console.log(diff.toString()); // P1DT1H30M // (ISO 8601 davomiyligi qatori: 1 kun, 1 soat, 30 daqiqa)

Sana va vaqtlarni solishtirish Moment va Temporal ikkalasi ham sana va vaqtlarni solishtirishga imkon beradi va qaysi biri ikkinchisidan oldin kelishini aniqlashga imkon beradi, ammo API bilan har xil yondashuvlarni qo'llaydi. Moment ikkita Moment obyektini solishtirish uchun isBefore, isAfter va isSame kabi usullarni taqdim etadi. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');

console.log(date1.isBefore(sana2)); // rost

Temporal bir xil turdagi ikkita ob'ekt o'rtasida taqqoslashni amalga oshirish uchun statik taqqoslash usulidan foydalanadi. Agar birinchi sana ikkinchidan oldin kelsa -1, teng bo'lsa 0 yoki birinchi sana ikkinchidan keyin kelsa 1 qaytaradi. Quyidagi misol ikkita PlainDate ob'ektini qanday solishtirishni ko'rsatadi. Temporal.PlainDate.compare argumentlarining ikkalasi ham PlainDate obyektlari bo‘lishi kerak.

const date1 = Temporal.PlainDate.from({ yil: 2026, oy: 2, kun: 24}); const date2 = Temporal.PlainDate.from({ yil: 2026, oy: 3, kun: 24});

// date1 sana2dan oldin keladi, shuning uchun -1 console.log(Temporal.PlainDate.compare(sana1, sana2));

// Har xil turdagi ikkita ob'ektni solishtirishga harakat qilsak, xato console.log(Temporal.PlainDate.compare(date1, Temporal.Now.instant())); // TypeError: Vaqtinchalik xato: yaroqsiz PlainDate maydonlari taqdim etilgan.

Xususan, bu Vaqtinchalik ob'ektlar qatorini xronologik tartibda saralashni osonlashtiradi. // Temporal.PlainDate obyektlari massivi const sana = [... ];

// solishtiruvchi funksiya sifatida Temporal.PlainDate.compare dan foydalaning dates.sort(Temporal.PlainDate.compare);

Vaqt mintaqasi konvertatsiyalari Asosiy Moment kutubxonasi vaqt mintaqasini o'zgartirishni qo'llab-quvvatlamaydi. Agar sizga ushbu funksiya kerak bo'lsa, moment-timezone paketini ham o'rnatishingiz kerak. Ushbu paket daraxtni silkitib qo'ymaydi va shuning uchun sizning to'plamingiz hajmini sezilarli darajada oshirishi mumkin. Vaqt zonasini o'rnatganingizdan so'ng, siz Moment ob'ektlarini tz usuli bilan turli vaqt zonalariga o'zgartirishingiz mumkin. Boshqa Moment operatsiyalarida bo'lgani kabi, bu asosiy narsani o'zgartiradiob'ekt. // AQShning sharqiy vaqti bilan const now = moment(); console.log(hozir); // Moment<2026-02-28T20:08:20-05:00>

// Tinch okeani vaqtiga aylantirish. // Asl Sharq vaqti yo'qolgan. now.tz('Amerika/Los_Anjeles'); console.log(hozir); // Moment<2026-02-28T17:08:20-08:00>

Vaqt mintaqasi funksiyasi Temporal.ZonedDateTime obyektidan foydalanganda Temporal API-ga o'rnatilgan. Ushbu ob'ektlar bir vaqtning o'zida, lekin belgilangan vaqt zonasida ifodalovchi yangi ZonedDateTime qaytaradigan withTimeZone usulini o'z ichiga oladi. // Shunga qaramay, AQShning sharqiy vaqti bilan const now = Temporal.Now.zonedDateTimeISO(); console.log(now.toLocaleString()); // 28.02.2026, 20:12:02 EST

// Tinch okeani vaqtiga aylantirish const nowPacific = now.withTimeZone('Amerika/Los_Anjeles'); console.log(nowPacific.toLocaleString()); // 28.02.2026, 17:12:02 PST

// Asl ob'ekt o'zgarishsiz qoladi console.log(now.toLocaleString()); // 28.02.2026, 20:12:02 EST

Eslatma: toLocaleString tomonidan qaytarilgan formatlangan qiymatlar, nomidan ko'rinib turibdiki, mahalliy tilga bog'liq. Namuna kodi en-AQSh tilida ishlab chiqilgan, shuning uchun format quyidagicha: 28.02.2026, 17:12:02 PST. Boshqa hududda bu boshqacha bo'lishi mumkin. Masalan, en-GB tilida siz 28/2/2026, 17:12:02 GMT-8 kabi biror narsani olasiz. Haqiqiy dunyo refaktoringi Aytaylik, biz vaqt zonalari bo'ylab tadbirlarni rejalashtirish uchun ilova yaratmoqdamiz. Ushbu ilovaning bir qismi getEventTimes funksiyasi boʻlib, u hodisa vaqti va sanasini, mahalliy vaqt mintaqasini va maqsadli vaqt mintaqasini ifodalovchi ISO 8601 qatorini oladi. Funktsiya ikkala vaqt mintaqasida ham hodisa uchun formatlangan vaqt va sana qatorlarini yaratadi. Agar funktsiyaga joriy vaqt/sana qatori bo'lmagan kirish qatori berilsa, u xatoga yo'l qo'yadi. Mana, Moment-dan foydalangan holda (shuningdek, moment-timezone paketidan foydalanishni talab qiladigan) asl dastur.

"moment-vaqt zonasi" dan momentni import qilish;

getEventTimes funktsiyasi (inputString, userTimeZone, targetTimeZone) { const timeFormat = 'MMD D, YYYY, h:dd:ss a z';

// 1. Foydalanuvchi vaqt zonasida boshlang'ich momentni yarating const eventTime = moment.tz( inputString, moment.ISO_8601, // ISO 8601 qatorini kuting rost, // Qattiq tahlil qilish userTimeZone );

// Agar inputString to'g'ri sanani bildirmasa, xatoga yo'l qo'ying agar (!eventTime.isValid()) { yangi xato chiqarish ('Sana/vaqt kiritilmagan'); }

// 2. Maqsadli vaqtni hisoblang // MUHIM: Biz klonlashimiz kerak yoki "voqea vaqti" abadiy o'zgaradi! const targetTime = eventTime.clone().tz(targetTimeZone);

qaytish { mahalliy: eventTime.format (timeFormat), maqsad: targetTime.format (timeFormat), }; }

const jadvali = getEventTimes( '2026-03-05T15:00-05:00', "Amerika/Nyu_York", "Yevropa/London", );

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

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

Ushbu misolda biz Moment-ga foydali tarzda o'rnatilgan ISO 8601 kutilgan sana formatidan foydalanmoqdamiz. Shuningdek, biz qattiq tahlildan foydalanmoqdamiz, ya'ni Moment formatga mos kelmaydigan sanalar qatori bilan taxmin qilishga urinmaydi. Agar ISO bo'lmagan sanalar qatori o'tkazilsa, bu yaroqsiz sana ob'ektiga olib keladi va biz xatoga yo'l qo'yamiz. Vaqtinchalik dastur o'xshash ko'rinadi, lekin bir nechta asosiy farqlarga ega.

getEventTimes funktsiyasi (inputString, userTimeZone, targetTimeZone) { // 1. Kirishni to'g'ridan-to'g'ri Instantga tahlil qiling, so'ngra yarating // foydalanuvchi zonasida ZonedDateTime. const instant = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);

// 2. Maqsad zonasiga aylantirish // Bu avtomatik ravishda YANGI ob'ektni qaytaradi; "eventTime" xavfsiz. const targetTime = eventTime.withTimeZone(targetTimeZone);

// 3. Intl yordamida formatlash (oʻrnatilgan) const variantlari = { yil: "raqamli", oy: "qisqa", kun: "raqamli", soat: "raqamli", daqiqa: "2-raqamli", ikkinchisi: "2-raqamli", timeZoneName: "qisqa" };

qaytish { mahalliy: eventTime.toLocaleString (navigator.language, variantlar), maqsad: targetTime.toLocaleString (navigator.language, variantlar) }; }

const jadvali = getEventTimes( '2026-03-05T15:00-05:00', "Amerika/Nyu_York", "Yevropa/London", );

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

console.log(schedule.target); // 2026-yil 5-mart, GMT vaqti bilan 20:00:00

Moment yordamida biz olingan sana satrlari uchun format qatorini aniq belgilashimiz kerak. Foydalanuvchining joylashuvi yoki hududidan qat’i nazar, tadbir vaqti har doim 2026-yil 5-mart, 3:00:00 sifatida formatlanadi.EST. Bundan tashqari, biz aniq istisno qilishimiz shart emas. Agar yaroqsiz satr Temporal.Instant.fromga uzatilsa, Temporal biz uchun istisno qiladi. Shunisi e'tiborga loyiqki, hatto qat'iy tahlil qilingan bo'lsa ham, Moment versiyasi hali ham yumshoqroq. Vaqtinchalik satr oxiridagi vaqt zonasining siljishini talab qiladi. Shuni ham yodda tutish kerakki, biz navigator.language dan foydalanayotganimiz sababli, bu kod faqat brauzer muhitida ishlaydi, chunki navigator Node.js muhitida belgilanmagan. Vaqtinchalik dastur brauzerning joriy tilidan (navigator.language) foydalanadi, shuning uchun foydalanuvchi avtomatik ravishda mahalliy vaqt formatida formatlangan voqea vaqtlarini oladi. AQShda bu 2026-yil 5-mart, EST 15:00. Biroq, agar foydalanuvchi Londonda bo'lsa, masalan, tadbir vaqtlari 2026 yil 5-mart, 15:00:00 GMT-5 sifatida formatlanadi. Xulosa

Harakat Moment.js Vaqtinchalik Joriy vaqt moment() Temporal.Now.zonedDateTimeISO() ISOni tahlil qilish moment(str) Temporal.Instant.from(str) Vaqt qo'shing .add(7, 'kunlar') (mutatsiyalar) .add({ kun: 7 }) (yangi obyekt) Farq .diff(boshqa, 'soat') .beri(boshqa).soatlardan beri Vaqt mintaqasi .tz('Zona/nom') .withTimeZone('Zona/nom')

Bir qarashda, farq biroz boshqacha bo'lishi mumkin (va Temporal misolida, ba'zan batafsilroq va qat'iyroq) sintaksis, ammo Temporal-dan Moment.js-dan foydalanishning bir qancha asosiy afzalliklari mavjud:

Aniqroq bo'lish, kamroq kutilmagan hodisalar va kutilmagan xatolarni anglatadi. Moment yumshoqroq bo'lib tuyulishi mumkin, ammo u "taxmin qilish" ni o'z ichiga oladi, bu ba'zan noto'g'ri sanalarga olib kelishi mumkin. Agar siz Temporalga noto'g'ri narsa bersangiz, u xato qiladi. Agar kod ishlayotgan bo'lsa, sizda haqiqiy sana borligini bilasiz. Moment ilova to'plamiga sezilarli hajm qo'shishi mumkin, ayniqsa siz moment-vaqt mintaqasi paketidan foydalansangiz. Temporal hech narsa qo'shmaydi (u maqsadli brauzerlaringizga yuborilgandan keyin). O'zgarmaslik sizga sanani o'zgartirish va operatsiyalarni bajarishda hech qachon ma'lumotlarni yo'qotmasligingiz yoki qayta yozmasligingizga ishonch beradi. Talablaringizga qarab vaqtning turli xil ko'rinishlari (Instant, PlainDateTime, ZonedDateTime), bu erda Moment har doim UTC vaqt tamg'asi atrofida o'raladi. Temporal sanani formatlash uchun Intl API'laridan foydalanadi, ya'ni siz tokenlarni aniq ko'rsatmasdan turib, mahalliy tilni biladigan formatlashingiz mumkin.

Polyfill haqida eslatmalar Yuqorida aytib o'tilganidek, @js-temporal/polyfill nomli npm to'plami sifatida tarqatilgan Temporal polyfill mavjud. Agar siz bugun Temporal-dan foydalanmoqchi bo'lsangiz, hali API-ni yubormagan Safari kabi brauzerlarni qo'llab-quvvatlash uchun sizga ushbu polifill kerak bo'ladi. Buning yomon tomoni shundaki, u sizning to'plamingiz hajmini oshiradi. Yaxshi xabar shundaki, u hali ham moment yoki vaqt mintaqasidan sezilarli darajada kamroq qo'shadi. Bundlephobia.com, npm paket o'lchamlari haqida ma'lumot taqdim etuvchi veb-sayt tomonidan e'lon qilingan paket o'lchamlarini taqqoslash (Bundlephobia tahlilini ko'rish uchun har bir paket nomini bosing):

Paket Kichkinalashtirilgan Kichkinalashtirilgan va gziplangan @js-temporal/polyfill 154,1 kB 44,1 kB moment 294,4 kB 75,4 kB moment-vaqt mintaqasi 1 MB 114,2 kB

Polifill tarixan xotiradan foydalanish bilan bog'liq ba'zi ishlash muammolariga duch kelgan va yozish paytida u alfa holatida deb hisoblanadi. Shu sababli, siz uni yanada etuk holatga etgunga qadar ishlab chiqarishda ishlatishni xohlamasligingiz mumkin. Yana bir yaxshi xabar shundaki, polifill uzoq vaqt talab qilinmaydi (agar eski brauzerlarni qo'llab-quvvatlash kerak bo'lmasa, albatta). Yozish vaqtida Temporal Chrome, Edge va Firefox-da yuborilgan. U Safari-da hali tayyor emas, garchi u eng so'nggi Technology Preview-da ish vaqti bayrog'i bilan mavjud bo'lsa ham.

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