Temporal va Date
JavaScript Date va Temporal o‘rtasidagi farqlarni o‘rganing
- Date’da oylar 0 dan, Temporal’da esa 1 dan boshlanadi
- Sana arifmetikasi qo‘lda, Temporal o‘rnatilgan
- Sana qiymatlarni o‘zgartiradi, vaqtinchalik emas
- Sana UTC va vaqt mintaqalarini aralashtiradi, Temporal ularni ajratadi
- DST bilan ishlashda sana muvaffaqiyatsiz bo‘lishi mumkin, vaqtinchalik bo‘lishi mumkin emas
Nima uchun Temporal sanaga zamonaviy muqobil ekanligini bilib oling.
JavaScript Date muammolari
JavaScript Date obyekti eski va bir nechta dizayn muammolariga ega.
Bular Date obyektlaridan foydalanishda ishlab chiquvchilarning eng keng tarqalgan xatolari:
Oylar 0 dan boshlangani sababli noto‘g‘ri oy raqamidan foydalanish.
O‘zgartiruvchi metodni chaqirib, sana obyektini tasodifan o‘zgartirib qo‘yish.
Turli muhitlarda turlicha ishlaydigan noaniq stringlarni tahlil qilish (parsing).
- Xuddi shu dasturda mahalliy vaqt va UTC qiymatlarini aralashtirish.
DST o‘zgarishlari davomida hisob-kitob qilib, kutilmagan soatlarni olish.
JavaScript Date obyekti 1995-yildan beri ishlatib kelinmoqda.
Temporal - bu Date’dagi ko‘plab muammolarni hal qilish uchun mo‘ljallangan zamonaviy almashtirish.
Date’da oylar 0 dan boshlanadi
JavaScript Date obyektida yanvar 0 oy va dekabr 11 oy.
Temporal’da oylar 1 dan boshlanadi
JavaScript Temporal obyektida yanvar - 1 oy va dekabr - 12 oy.
Bu foydalanuvchi uchun ancha qulayroq.
Temporal misoli
// May 17, 2026:
const date = new Temporal.PlainDate(2026, 5, 17)
O‘zingiz sinab ko‘ring »
Date obyektlari o‘zgaruvchan
JavaScript Date obyektlari o‘zgarishi mumkin.
Date objects are mutable.
Date misoli
Date metodlari asl sana obyektini o‘zgartirishi mumkin:
// Create a Date
const date = new Date("2026-05-17");
// Add 7 days to date
date.setDate(date.getDate() + 7);
// Here the original date is lost
O‘zingiz sinab ko‘ring »
Date misoli
Date metodlari boshqa sana obyektlarini o‘zgartirishi mumkin:
// Create a Date
const date1 = new Date("2026-05-17");
// Create a copy
const date2 = date1;
// Add 7 days to date1
date1.setDate(date1.getDate() + 7);
// Here date2 has changed
O‘zingiz sinab ko‘ring »
Yuqoridagi misolda date1 va date2 o‘zgaruvchilari bir xil obyektga ishora qiladi.
Shu sababli date1 o‘zgarganda date2 ham o‘zgaradi.
Bu sana qiymatlari nusxalanganda yoki qayta ishlatilganda kutilmagan natijalarga olib kelishi mumkin.
Temporal obyektlari o‘zgarmas
JavaScript Temporal objects cannot change.
Vaqtinchalik obyektlar o‘zgarmasdir.
Temporal misoli
Temporal amallari har doim yangi obyekt (yoki qiymat) qaytaradi.
// Create a Date
const date1 = Temporal.PlainDate.from("2026-05-17");
// Add 7 days
const date2 = date1.add({ days: 7 });
// Here original date1 is kept
O‘zingiz sinab ko‘ring »
Date tahlili (parsing) izchil emas
JavaScript turli formatlar, brauzer g‘ayrioddiylari va mahalliy kutilmagan hodisalarning mina maydoni bo‘ldi.
Sana stringlari brauzerlar va muhitlarda turlicha tahlil qilinishi mumkin va turli formatlar mahalliy vaqt yoki UTC sifatida talqin qilinishi mumkin.
JavaScript’da 2026-05-07 kabi sana stringi UTC vaqti sifatida talqin qilinadi.
2026-05-07T14:40:00 kabi sana-vaqt stringi mahalliy vaqt sifatida talqin qilinadi.
Date misoli
const d1 = new Date("2026-05-17");
const d2 = new Date("2026-05-17T00:00:00");
const d3 = new Date("05/17/2026");
const d4 = new Date("May 17 2026");
const d5 = new Date("17 May 2026");
const d6 = new Date(2026, 4, 17);
O‘zingiz sinab ko‘ring »
Temporal PlainDate
Temporal ISO stringlari uchun qat’iy tahlil (parsing) qoidalarini belgilash orqali yuqoridagi muammolarning oldini oladi.
Temporal.PlainDate vaqt belgisi (timestamp) emas.
Bu faqat 2026-05-17, vaqt va vaqt zonasi yo‘q.
Temporal misoli
// Create a PlainDate object
const date = Temporal.PlainDate.from("2026-05-17");
O‘zingiz sinab ko‘ring »
Date va vaqt zonasi
new Date(2026, 4, 1) vaqt tamg‘asini yaratadi
mahalliy vaqtingiz yarim tunda.
Bu shuni anglatadiki, siz uni UTC ga formatlaganingizda bir kun "o‘zgarishi" mumkin.
Date misoli
// Create a Date object
const date = new Date(2026, 4, 1);
// Might be another day in some time zones:
date.toISOString();
O‘zingiz sinab ko‘ring »
Date mahalliy vaqt va UTC’ni aralashtirib yuboradi
Sana obyekti har doim vaqt tamg‘asini saqlaydi, lekin u qiymatlarni mahalliy vaqt yoki UTC sifatida ko‘rsatishi mumkin.
Ushbu aralash sanalarni o‘zgartirish va taqqoslashda osongina chalkashlikka olib kelishi mumkin.
Xuddi shu moment qanday ko‘rsatilishiga qarab boshqacha ko‘rinishi mumkin.
Date misoli
const date = new Date();
let time1 = date.toString();
let time2 = date.toUTCString();
O‘zingiz sinab ko‘ring »
Temporal vaqt va UTC’ni ajratadi
Temporal vaqt zonalari uchun aniq tiplardan foydalanadi.
Temporal.ZonedDateTime har doim vaqt zonasini o‘z ichiga oladi.
Temporal misoli
const instant = Temporal.Now.instant();
const local = Temporal.Now.zonedDateTimeISO();
O‘zingiz sinab ko‘ring »
DST sana matematikasini buzishi mumkin
Yozgi vaqt (DST) tufayli sutka 23 yoki 25 soat davom etishi mumkin.
Bu har kuni aniq 24 soat deb hisoblaydigan hisoblarni buzishi mumkin.
Misol
const start = new Date("2026-03-29T00:00:00");
const end = new Date(start.getTime() + 24 * 60 * 60 * 1000);
Natija DST o‘zgarishlari bilan vaqt zonalarida bir soatga o‘chirilishi mumkin.
Sana arifmetikasi
Date math often requires manual calculations.
Date misoli
const start = new Date("2026-05-01");
const end = new Date("2026-05-17");
const diff = end - start;
O‘zingiz sinab ko‘ring »
Temporal’da o‘rnatilgan sana arifmetikasi mavjud.
Temporal misoli
const start = Temporal.PlainDate.from("2026-05-01");
const end = Temporal.PlainDate.from("2026-05-17");
const diff = start.until(end);
O‘zingiz sinab ko‘ring »
Nanosekund aniqligi
Sana Object millisekundlar aniqligidan foydalanadi.
Temporal offers 1 million times higher nanosecond precision.
Date hamma narsani aralashtirib yuboradi
Date hamma narsani bitta obyektda aralashtirib yuboradi.
Date (muammo)
const date = new Date(); // date + time + zone
Temporal aniq tiplardan foydalanadi
Vaqtinchalik obyektlar turli xil foydalanish holatlarini turli obyektlarga ajratadi.
Bu kodni o‘qishni osonlashtiradi va xatoga yo‘l qo‘ymaydi.
| 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 |
Date va Temporal o‘rtasidagi farqlar
| 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 |
Tez vaqt tamg‘asini olish kabi oddiy vazifalar uchun hali ham JavaScript Date dan foydalanishingiz mumkin.
Agar siz Temporalsiz eski muhitlarni qo‘llab-quvvatlasangiz, sizga ham kerak bo‘lishi mumkin.
JavaScript Temporal xavfsizroq, aniqroq va zamonaviy ilovalar uchun mo‘ljallangan.
Temporal’dan qachon foydalanish kerak?
Vaqt zonalari bilan to‘g‘ri ishlash kerak bo‘lganda.
Xalqaro foydalanuvchilar bilan ishlaganingizda.
Xavfsiz sana arifmetikasi kerak bo‘lganda.
- Siz aniq va zamonaviy kodni xohlaysiz.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
