Nima uchun Temporal
Temporal nima uchun yaratilgan?
Date obyekti 1995 yilda yaratilgan va dizayndagi ba’zi muammolarga ega bo‘lib, xatolarga olib keladi.
Masalan, Date-dagi oylar nolga asoslangan, bu chalkash.
Yana bir muammo shundaki, Date metodlari Date obyektini o‘zgartirishi (mutatsiya) mumkin, bu esa kutilmagan natijalarga olib kelishi mumkin.
Vaqtinchalik ushbu muammolarni aniqroq obyekt turlari va bashorat qilinadigan xatti-harakatlar bilan hal qilish uchun yaratilgan.
Misollar
Date-dagi oylar nolga asoslangan, bu chalkash:
// Month 5 is June
let d = new Date(2026, 5, 17);
O‘zingiz sinab ko‘ring »
Date metodlari bir xil obyektni (mutatsiya) o‘zgartiradi, bu esa kutilmagan natijalarni keltirib chiqarishi mumkin:
// Create a Date
let d = new Date(2026, 5, 17);
// Add 7 days
d.setDate(d.getDate() + 7);
// Here the original date (d) is lost
O‘zingiz sinab ko‘ring »
Oddiy Temporal misoli
Temporal yordamida siz bugungi sanani olishingiz va kunlarni aniq va xavfsiz tarzda qo‘shishingiz mumkin.
Misol
// Create a Temporal object
const today = Temporal.Now.plainDateISO();
// Add a duration
const nextWeek = today.add({ days: 7 });
O‘zingiz sinab ko‘ring »
Sana bilan solishtiring
bilan JavaScript Date, sizda faqat bitta turdagi sana obyekti mavjud.
Alohida obyektlar
Temporal sizga kerak bo‘lgan narsaga qarab alohida obyektlarni beradi:
Instant — UTC’dagi aniq lahza
PlainDate — faqat sana
- PlainDateTime - faqat sana va vaqt
- ZonedDateTime - zona bilan sana va vaqt
Har bir obyektdan qachon foydalanish kerak
- Instant - Vaqt belgilari va taqqoslash uchun
PlainDate — tug‘ilgan kunlar va kalendar sanalari uchun
PlainDateTime — mahalliy rejalashtirish vazifalari uchun
ZonedDateTime — vaqt zonalarini hisobga oluvchi ilovalar uchun
Temporal obyektlari o‘zgarmas
Vaqtinchalik obyektlar o‘zgarmasdir, ya’ni ularni yaratilgandan keyin o‘zgartirib bo‘lmaydi.
Vaqtinchalik obyektlar mavjudni o‘zgartirish o‘rniga yangi qiymatni qaytaradi.
Temporal sanalari DST uchun xavfsiz
DST uchun xavfsiz arifmetika yozgi vaqtga (DST) o‘tishlarda vaqt hisob-kitoblari (qo‘shish va ayirish) aniq qolishini ta’minlaydi va 1 soatlik xatolarning oldini oladi.
Bu mahalliy soat siljishlarini tushunadigan vaqt mintaqasi va kalendarga mos keladigan obyektlardan (ZonedDateTime) foydalanishni o‘z ichiga oladi.
Temporal sanalari RFC 5545 dan foydalanadi
RFC 5545 (Internet Calendaring and Scheduling Core Object Specification) — kalendar va rejalashtirish ma’lumotlarini almashish bo‘yicha soha standarti.
U turli tizimlarga (masalan, Google Calendar, Apple Calendar va Microsoft Outlook) bir-biri bilan muammosiz ishlash imkonini beradi.
JavaScript Date va Temporal
| Xususiyat | Sana | Temporal |
|---|---|---|
| ISO 8601 Date/Time | Ha | Ha |
| RFC 3339 Date/Time | Ha | Ha |
| RFC 9557 Date/Time | Yo‘q | Ha |
| Time zone support | Limited | O‘rnatilgan |
| Immutable | Yo‘q | Ha |
| Faqat sana tipi | Yo‘q | Ha |
| Faqat vaqt tipi | Yo‘q | Ha |
| 1-Based Months | Yo‘q | Ha |
| DST safe arithmetic | Yo‘q | Ha |
| ISO 8601 Duration | Yo‘q | Ha |
| RFC 9557 iCalendar | Yo‘q | Ha |
| Modern API design | Yo‘q | Ha |
| Precision | Milliseconds | Nanoseconds |
JavaScript Temporal - bu o‘rnatilgan sana va vaqt obyektlari to‘plami bo‘lib, ulardan foydalanish JavaScript sanasiga qaraganda osonroq va xavfsizroqdir.
Temporal mahalliy vaqt o‘zgarishlari (masalan, DST o‘tishlari) bilan bog‘liq xatolarning oldini olish uchun sanalar va vaqtlar uchun alohida klasslardan foydalanadi.
Temporal’dan qachon foydalanish kerak?
Sana va vaqtni ishonchli boshqarish kerak bo‘lganda Temporaldan foydalaning.
Vaqt zonalarini to‘g‘ri qo‘llab-quvvatlash kerak bo‘lganda
Xavfsiz sana arifmetikasi (add / subtract, since / until) kerak bo‘lganda
DST xatolaridan qochish kerak bo‘lganda
Oldindan aytib bo‘ladigan va o‘qilishi oson kod kerak bo‘lganda
Temporal obyektlari
2026-yil mart oyida yangilangan
| obyekt | Tavsif |
|---|---|
| Temporal.Duration | Davomiylik uchun obyekt (kunlar, soatlar, daqiqalar) |
| Temporal.Instant | UTC vaqtidagi aniq moment uchun obyekt |
| Temporal.PlainDateTime | Faqat sana va vaqt uchun obyekt (vaqt zonasi yo‘q) |
| Temporal.PlainDate | Faqat sana uchun obyekt (yil, oy, kun) |
| Temporal.PlainTime | Faqat vaqt uchun obyekt |
| Temporal.PlainYearMonth | Faqat yil va oy uchun obyekt |
| Temporal.PlainMonthDay | Faqat oy va kun uchun obyekt |
| Temporal.ZonedDateTime | Vaqt mintaqasi bilan sana va vaqt uchun obyekt |
| Temporal.Now | Temporal metodlari uchun konteyner |
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
