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.

ULASHISH

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.

Date misoli

// May 17, 2026:
let date = new Date(2026, 4, 17)
O‘zingiz sinab ko‘ring »
Sana obyekti chalkash, chunki ko‘pchilik yanvar oyi 1-oy bo‘lishini kutishadi.

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 »
Noaniq formatlardan qochish va iloji boricha aniq formatlardan foydalanish xavfsizroq.

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.

obyektTavsif
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!