O'zbek

JavaScript Temporal API bo'yicha chuqur qo'llanma – turli xalqaro kontekstlarda sana va vaqtlarni samarali boshqarish uchun zamonaviy yechim.

JavaScript Temporal API: Global Auditoriya Uchun Sana va Vaqtni Zamonaviy Boshqarish

JavaScript `Date` obyekti uzoq vaqtdan beri dasturchilar uchun noqulaylik manbai bo'lib kelgan. Uning o'zgaruvchanligi, nomuvofiq API va vaqt mintaqasini yomon qo'llab-quvvatlashi Moment.js va date-fns kabi ko'plab kutubxonalarning paydo bo'lishiga olib keldi. Endi, Temporal API bilan JavaScript sana va vaqtlarni yaxshilangan aniqlik va tiniqlik bilan boshqarish uchun zamonaviy, o'rnatilgan yechimni taklif qiladi. Ushbu maqolada Temporal API ning xususiyatlari, afzalliklari va turli xalqaro kontekstlarda qo'llanilishiga e'tibor qaratilgan holda keng qamrovli tahlil taqdim etiladi.

Temporal API nima?

Temporal API — bu JavaScript-dagi `Date` obyektining kamchiliklarini bartaraf etish uchun mo'ljallangan yangi, global obyekt. U sanalar, vaqtlar, vaqt mintaqalari va taqvim tizimlari bilan ishlash uchun toza, o'zgarmas API taqdim etadi. Eng muhimi, u sana va vaqt tushunchalarini real dunyodagi foydalanish va kutishlarga yaqinroq tarzda ifodalashni maqsad qiladi, bu esa internatsionallashtirishni ancha soddalashtiradi.

Asosiy xususiyatlari:

Asosiy Temporal Obyektlari

Temporal API bir nechta yangi obyekt turlarini taqdim etadi. Mana ularning ba'zi asosiy turlari:

Sanalar bilan ishlash

`Temporal.PlainDate` yaratish

`Temporal.PlainDate` yaratish uchun konstruktordan foydalanishingiz mumkin:

const plainDate = new Temporal.PlainDate(2024, 10, 27); // Yil, Oy (1-12), Kun
console.log(plainDate.toString()); // Natija: 2024-10-27

Shuningdek, ISO 8601 formatidagi satrni qabul qiluvchi `from` metodidan ham foydalanishingiz mumkin:

const plainDateFromString = Temporal.PlainDate.from('2024-10-27');
console.log(plainDateFromString.toString()); // Natija: 2024-10-27

Sana Komponentlarini Olish

Siz `year`, `month` va `day` kabi xususiyatlar yordamida alohida sana komponentlariga kirishingiz mumkin:

console.log(plainDate.year); // Natija: 2024
console.log(plainDate.month); // Natija: 10
console.log(plainDate.day); // Natija: 27

Sana Arifmetikasi

Kunlar, haftalar, oylar yoki yillarni qo'shish yoki ayirish uchun `plus` va `minus` metodlaridan foydalaning. Bu metodlar yangi `Temporal.PlainDate` obyektini qaytaradi:

const nextWeek = plainDate.plus({ days: 7 });
console.log(nextWeek.toString()); // Natija: 2024-11-03

const lastMonth = plainDate.minus({ months: 1 });
console.log(lastMonth.toString()); // Natija: 2024-09-27

Sanalarni Taqqoslash

Siz `compare` metodi yordamida sanalarni taqqoslashingiz mumkin:

const date1 = new Temporal.PlainDate(2024, 10, 27);
const date2 = new Temporal.PlainDate(2024, 11, 15);

console.log(Temporal.PlainDate.compare(date1, date2)); // Natija: -1 (date1 date2 dan oldinroq)

Vaqtlar bilan ishlash

`Temporal.PlainTime` yaratish

`Temporal.PlainTime` yaratish uchun konstruktordan foydalaning:

const plainTime = new Temporal.PlainTime(10, 30, 0); // Soat, Daqiqa, Soniya
console.log(plainTime.toString()); // Natija: 10:30:00

Yoki ISO 8601 vaqt satri bilan `from` metodidan foydalaning:

const plainTimeFromString = Temporal.PlainTime.from('10:30:00');
console.log(plainTimeFromString.toString()); // Natija: 10:30:00

Vaqt Komponentlarini Olish

console.log(plainTime.hour); // Natija: 10
console.log(plainTime.minute); // Natija: 30
console.log(plainTime.second); // Natija: 0

Vaqt Arifmetikasi

const later = plainTime.plus({ minutes: 15 });
console.log(later.toString()); // Natija: 10:45:00

Sana va Vaqt bilan Birgalikda Ishlash

`Temporal.PlainDateTime` yaratish

Siz `Temporal.PlainDateTime` ni to'g'ridan-to'g'ri yoki `Temporal.PlainDate` va `Temporal.PlainTime` ni birlashtirib yaratishingiz mumkin:

const plainDateTime = new Temporal.PlainDateTime(2024, 10, 27, 10, 30, 0);
console.log(plainDateTime.toString()); // Natija: 2024-10-27T10:30:00

const date = new Temporal.PlainDate(2024, 10, 27);
const time = new Temporal.PlainTime(10, 30, 0);
const combinedDateTime = date.toPlainDateTime(time);
console.log(combinedDateTime.toString()); // Natija: 2024-10-27T10:30:00

Vaqt Mintaqalari

Vaqt mintaqalarini to'g'ri boshqarish turli joylardagi foydalanuvchilar bilan ishlaydigan ilovalar uchun juda muhimdir. Temporal API `Temporal.ZonedDateTime` va `Temporal.TimeZone` obyektlari orqali vaqt mintaqalarini mustahkam qo'llab-quvvatlaydi.

`Temporal.ZonedDateTime` yaratish

`Temporal.ZonedDateTime` yaratish uchun sizga `Temporal.PlainDateTime` va vaqt mintaqasi identifikatori kerak bo'ladi. Vaqt mintaqasi identifikatorlari IANA vaqt mintaqalari ma'lumotlar bazasiga asoslangan (masalan, `America/Los_Angeles`, `Europe/London`, `Asia/Tokyo`).

const plainDateTime = new Temporal.PlainDateTime(2024, 10, 27, 10, 30, 0);
const timeZone = 'America/Los_Angeles';
const zonedDateTime = plainDateTime.toZonedDateTime(timeZone);
console.log(zonedDateTime.toString()); // Natija: 2024-10-27T10:30:00-07:00[America/Los_Angeles] (Siljish yozgi vaqt qoidalariga bog'liq bo'ladi)

Shu bilan bir qatorda, `Instant` dan `Temporal.ZonedDateTime` yarating.

const instant = Temporal.Instant.fromEpochSeconds(1666866600); // Misol vaqt belgisi
const zonedDateTimeFromInstant = instant.toZonedDateTimeISO(timeZone); // 'America/Los_Angeles' kabi vaqt mintaqasi
console.log(zonedDateTimeFromInstant.toString());

Vaqt Mintaqalari O'rtasida Konvertatsiya Qilish

Siz `Temporal.ZonedDateTime` ni `withTimeZone` metodi yordamida boshqa vaqt mintaqasiga o'zgartirishingiz mumkin:

const newTimeZone = 'Europe/London';
const zonedDateTimeInLondon = zonedDateTime.withTimeZone(newTimeZone);
console.log(zonedDateTimeInLondon.toString()); // Natija: 2024-10-27T18:30:00+01:00[Europe/London]

Vaqt Mintaqasi Siljishlari bilan Ishlash

`Temporal.TimeZone` obyektining `getOffsetStringFor` metodi berilgan `Temporal.Instant` uchun siljish satrini taqdim etadi:

const timeZoneObject = new Temporal.TimeZone(timeZone);
const offsetString = timeZoneObject.getOffsetStringFor(zonedDateTime.toInstant());
console.log(offsetString); // Natija: -07:00 (Yozgi vaqt qoidalariga bog'liq)

Aniq hisob-kitoblar uchun to'g'ri IANA vaqt mintaqasi identifikatorlaridan foydalanish muhimdir. Ushbu identifikatorlar yozgi vaqtga o'tish va vaqt mintaqalari chegaralaridagi o'zgarishlarni aks ettirish uchun muntazam ravishda saqlanadi va yangilanadi.

Davomiyliklar

`Temporal.Duration` obyekti vaqt oralig'ini ifodalaydi. Uni sana va vaqtlarga qo'shish yoki ulardan ayirish uchun ishlatish mumkin.

`Temporal.Duration` yaratish

Siz `Temporal.Duration` ni konstruktor yordamida, yillar, oylar, kunlar, soatlar, daqiqalar, soniyalar, millisoniyalar, mikrosoniyalar va nanosoniyalarni ko'rsatib yaratishingiz mumkin:

const duration = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9); // Yillar, Oylar, Kunlar, Soatlar, Daqiqalar, Soniyalar, Millisoniyalar, Mikrosoniyalar, Nanosoniyalar
console.log(duration.toString()); // Natija: P1Y2M3DT4H5M6.007008009S

Yoki ISO 8601 davomiylik satridan foydalanib:

const durationFromString = Temporal.Duration.from('P1Y2M3DT4H5M6S');
console.log(durationFromString.toString()); // Natija: P1Y2M3DT4H5M6S

Davomiyliklarni Sana va Vaqtlarga Qo'shish

const plainDate = new Temporal.PlainDate(2024, 10, 27);
const duration = new Temporal.Duration(0, 0, 7); // 7 kun
const newDate = plainDate.plus(duration);
console.log(newDate.toString()); // Natija: 2024-11-03

E'tibor bering, oylar yoki yillarni o'z ichiga olgan davomiyliklarni sanalarga qo'shishda ehtiyotkorlik bilan yondashish kerak, chunki bir oydagi yoki yildagi kunlar soni o'zgarishi mumkin.

Taqvim Tizimlari

Temporal API Grigorian taqvimidan tashqari turli taqvim tizimlarini qo'llab-quvvatlaydi. Bu turli madaniy kontekstlarda sanalarni boshqarishi kerak bo'lgan ilovalar uchun juda muhimdir. Qo'llab-quvvatlash hali rivojlanayotgan bo'lsa-da, u kelajakdagi kengayish uchun asos yaratadi.

Alternativ Taqvimlaridan Foydalanish

Muayyan taqvimdan foydalanish uchun uni Temporal obyektlarini yaratishda ko'rsatishingiz mumkin:

const hebrewDate = new Temporal.PlainDate(5785, 1, 1, { calendar: 'hebrew' });
console.log(hebrewDate.toString()); // Aniq natija amalga oshirish va formatlashga qarab farq qilishi mumkin. Yozish vaqtida ko'plab muhitlarda polifil talab qiladi.

Muhim: Grigorian bo'lmagan taqvimlarni qo'llab-quvvatlash polifillar yoki maxsus brauzer/muhit qo'llab-quvvatlashini talab qilishi mumkin. Eng so'nggi ma'lumotlar uchun Temporal API hujjatlari va brauzer mosligi jadvallarini tekshiring.

Sana va Vaqtlarni Formatlash

Temporal API sana va vaqtni manipulyatsiya qilishga qaratilgan bo'lsa-da, formatlash odatda `Intl.DateTimeFormat` obyekti tomonidan amalga oshiriladi, bu Xalqarolashtirish API ning bir qismidir. Temporal obyektlari `Intl.DateTimeFormat` bilan muammosiz ishlaydi.

`Intl.DateTimeFormat` dan Foydalanish

Mana `Temporal.PlainDate` ni `Intl.DateTimeFormat` yordamida qanday formatlash mumkin:

const plainDate = new Temporal.PlainDate(2024, 10, 27);
const formatter = new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'long', day: 'numeric' });
console.log(formatter.format(plainDate)); // Natija: October 27, 2024

const formatterGerman = new Intl.DateTimeFormat('de-DE', { year: 'numeric', month: 'long', day: 'numeric' });
console.log(formatterGerman.format(plainDate)); // Natija: 27. Oktober 2024

Siz o'z ehtiyojlaringizga mos ravishda formatlash parametrlarini sozlashingiz mumkin. `Intl.DateTimeFormat` ning birinchi argumenti — bu lokal, u formatlash uchun ishlatiladigan til va mintaqaviy an'analarni belgilaydi. Turli lokallardan (masalan, 'en-US', 'de-DE', 'fr-FR', 'ja-JP') foydalanish turli xil natija formatlarini beradi.

`Temporal.ZonedDateTime` ni Formatlash

`Temporal.ZonedDateTime` ni formatlash ham shunga o'xshash, ammo siz natijaga vaqt mintaqasi ma'lumotlarini ham kiritishingiz mumkin:

const plainDateTime = new Temporal.PlainDateTime(2024, 10, 27, 10, 30, 0);
const timeZone = 'America/Los_Angeles';
const zonedDateTime = plainDateTime.toZonedDateTime(timeZone);

const formatter = new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric', timeZoneName: 'short' });
console.log(formatter.format(zonedDateTime)); // Natija: October 27, 2024, 10:30 AM PDT (Vaqt mintaqasi qisqartmasi yozgi vaqt qoidalariga bog'liq)

Internatsionallashtirish bo'yicha Eng Yaxshi Amaliyotlar

Global kontekstda sana va vaqtlar bilan ishlashda quyidagi eng yaxshi amaliyotlarni yodda tuting:

Temporal API ni Eski Date Obyekti bilan Taqqoslash

Bu yerda Temporal API ning eski `Date` obyektiga nisbatan asosiy farqlari va afzalliklarini ko'rsatuvchi jadval keltirilgan:

Xususiyat Eski `Date` Obyekti Temporal API
O'zgaruvchanlik O'zgaruvchan (asl obyektni o'zgartiradi) O'zgarmas (yangi obyektlarni qaytaradi)
Vaqt Mintaqasini Qo'llab-quvvatlash Cheklangan va ko'pincha muammoli Mustahkam va aniq, IANA vaqt mintaqalari ma'lumotlar bazasiga asoslangan
API Nomuvofiq va ishlatish qiyin Aniq, izchil va intuitiv
Aniq Millisoniya Nanosoniya
Taqvim Tizimlari Grigorian bilan cheklangan Alternativ taqvim tizimlarini qo'llab-quvvatlaydi (rivojlanayotgan qo'llab-quvvatlash bilan)
Internatsionallashtirish Mustahkam internatsionallashtirish uchun tashqi kutubxonalarni talab qiladi O'rnatilgan qo'llab-quvvatlash va `Intl.DateTimeFormat` bilan muammosiz integratsiya

Brauzer tomonidan qo'llab-quvvatlanishi va Polifillar

Nisbatan yangi API bo'lganligi sababli, Temporal API ni brauzerlar tomonidan qo'llab-quvvatlanishi hali rivojlanmoqda. Qaysi brauzerlar va muhitlar uni tabiiy ravishda qo'llab-quvvatlashini ko'rish uchun eng so'nggi brauzer mosligi jadvallarini (masalan, MDN Web Docs da) tekshiring. Tabiiy qo'llab-quvvatlashga ega bo'lmagan eski brauzerlar yoki muhitlar uchun Temporal API funksionalligini ta'minlash uchun polifillardan foydalanishingiz mumkin. Mos variantlarni topish uchun internetda "Temporal API polyfill" deb qidiring.

Xulosa

JavaScript Temporal API JavaScript-da sana va vaqtlarni boshqarishda muhim qadamni ifodalaydi. Uning o'zgarmasligi, aniq API, mustahkam vaqt mintaqasini qo'llab-quvvatlashi va taqvim tizimi imkoniyatlari uni turli xalqaro kontekstlarda sana va vaqtlar bilan aniq va ishonchli ishlashi kerak bo'lgan ilovalar yaratuvchi dasturchilar uchun kuchli vositaga aylantiradi. Brauzer tomonidan qo'llab-quvvatlanish hali rivojlanayotgan bo'lsa-da, Temporal API ning afzalliklari uni o'rganishga va yangi loyihalar uchun qabul qilishga arziydi. Temporal API ni o'zlashtirib va internatsionallashtirish bo'yicha eng yaxshi amaliyotlarga rioya qilib, siz butun dunyodagi foydalanuvchilar uchun muammosiz va aniq sana va vaqt tajribasini taqdim etadigan ilovalar yaratishingiz mumkin.

Qo'shimcha o'rganish uchun