JavaScript'da sana va vaqt bilan ishlash: Date obyektini yaratish, oylar indeksatsiyasi (0-11), Timestamp (Unix Epoch), sanalarni formatlash (padStart, Intl API) va vaqt farqini hisoblash.
Bu bob bilan PART 2 (Intermediate JavaScript) yakunlanadi. Sana va vaqt bilan ishlash — deyarli har qanday real loyihada zarur bo'ladigan ko'nikma.
Date — JavaScript'da sana va vaqtni ifodalovchi maxsus obyekt.
| Usul | Natija |
|---|---|
new Date() | Joriy sana va vaqt |
new Date("2026-09-05") | Berilgan sana |
new Date(2026, 8, 5) | Yil, oy (0dan boshlanadi!), kun |
new Date(2026, 8, 5, 14, 30) | + soat, minut |
script.jsJavaScriptlet now = new Date();console.log(now); // joriy sana va vaqtlet specificDate = new Date(2026, 8, 5);console.log(specificDate); // 5-sentabr, 2026
⚠️ Common Mistake
new Date(2026, 8, 5) da oy 8 — bu sentabr, oktabr emas! Chunki JavaScript'da oylar 0dan boshlanadi (0 = yanvar, 11 = dekabr). Bu — eng ko'p uchraydigan Date xatolaridan biri.
| Metod | Qaytaradi |
|---|---|
getFullYear() | Yil (masalan, 2026) |
getMonth() | Oy (0-11) |
getDate() | Oyning kuni (1-31) |
getDay() | Hafta kuni (0=yakshanba, 6=shanba) |
getHours() | Soat |
getMinutes() | Minut |
getSeconds() | Soniya |
script.jsJavaScriptlet date = new Date(2026, 8, 5, 14, 30);console.log(date.getFullYear()); // 2026console.log(date.getMonth()); // 8 (sentabr, chunki 0dan boshlanadi)console.log(date.getDate()); // 5console.log(date.getDay()); // hafta kuni raqamiconsole.log(date.getHours()); // 14
💡 Key Idea
Chiqarilgan oy raqamiga inson tushunadigan oy nomini olish uchun +1 qo'shish kerak: date.getMonth() + 1 → 9 (sentabr).
Timestamp — 1970-yil 1-yanvardan (bu sana "Unix Epoch" deb ataladi) beri o'tgan millisekundlar soni. Bu — kompyuterlar sanani "raqam" sifatida saqlashning universal usuli.
Ikkita sanani solishtirish, orasidagi farqni hisoblash uchun ularni to'g'ridan-to'g'ri object sifatida solishtirish qiyin, lekin ularni son (timestamp)ga aylantirsak, oddiy matematik amal bilan solishtirish mumkin bo'ladi.
⏱️ Timestamp'ni soat mexanizmi ichidagi "sanoq" deb tasavvur qiling — u har doim faqat oldinga qarab sanaydi, va ikkita lahzani solishtirish uchun shunchaki ikkita sonni solishtirish kifoya.
script.jsJavaScriptlet now = new Date();console.log(now.getTime()); // masalan: 1788617400000console.log(Date.now()); // xuddi shu, lekin Date yaratmasdan
script.jsJavaScriptlet start = new Date(2026, 0, 1); // 1-yanvar, 2026let end = new Date(2026, 8, 5); // 5-sentabr, 2026let diffInMs = end.getTime() - start.getTime();let diffInDays = diffInMs / (1000 * 60 * 60 * 24);console.log(diffInDays); // necha kun o'tgani
end.getTime() - start.getTime() — ikki sana orasidagi farq millisekundlarda.1000 — 1 soniyadagi millisekundlar soni.1000 * 60 — 1 minutdagi millisekundlar.1000 * 60 * 60 — 1 soatdagi millisekundlar.1000 * 60 * 60 * 24 — 1 kundagi millisekundlar.🔥 Important
Timestamp bilan ishlash — sana bilan bog'liq deyarli barcha hisob-kitoblarning (necha kun qoldi, necha soat o'tdi va h.k.) asosini tashkil qiladi.
Date obyektining standart ko'rinishi (Thu Sep 05 2026...) odatda foydalanuvchiga ko'rsatish uchun mos emas. Buning uchun formatlash kerak.
script.jsJavaScriptfunction formatDate(date) {let day = String(date.getDate()).padStart(2, "0");let month = String(date.getMonth() + 1).padStart(2, "0");let year = date.getFullYear();return `${day}.${month}.${year}`;}console.log(formatDate(new Date(2026, 8, 5))); // "05.09.2026"
padStart(2, "0") — sonni 2 xonali qilib, kerak bo'lsa oldiga 0 qo'shadi (masalan, 5 → "05").
script.jsJavaScriptlet date = new Date(2026, 8, 5);let formatter = new Intl.DateTimeFormat("uz-UZ", {day: "numeric",month: "long",year: "numeric"});console.log(formatter.format(date)); // "5 sentabr 2026"
🔗 Connection
Intl obyekti — JavaScript'ning xalqarolashtirish (internationalization) API'si, u turli tillar va mintaqalar uchun to'g'ri formatlashni ta'minlaydi.
Date obyekti — vaqtni "o'qish" uchun, setTimeout/setInterval esa vaqt o'tishi bilan bog'liq amallarni rejalashtirish uchun ishlatiladi. Bular haqida Chapter 30'da batafsil to'xtalamiz.
script.jsJavaScriptfunction showTime() {let now = new Date();console.log(now.toLocaleTimeString());}setInterval(showTime, 1000); // har 1 soniyada vaqtni chiqaradi
🔗 Connection
Bu misol Chapter 30 (setTimeout/setInterval)ga kirish sifatida xizmat qiladi.
Task:
Joriy sanani new Date() yordamida yarating va uning yili, oyi (+1 bilan to'g'rilangan), kunini alohida-alohida chiqaring.
Required Concepts:
Date objectgetFullYear, getMonth, getDate+1 qo'shishni unutmang.Task:
Foydalanuvchi tug'ilgan yilini kiritadi (masalan, 2000). Uning necha yoshda ekanini joriy yil asosida hisoblab chiqaring.
Required Concepts:
getFullYear()new Date().getFullYear() - birthYearTask:
Berilgan ikki sana orasida necha kun, necha soat borligini hisoblaydigan getDaysAndHoursBetween(date1, date2) function yozing.
Required Concepts:
getTime()script.jsJavaScriptlet date = new Date(2026, 11, 25);console.log(date.getMonth());console.log(date.getDate());
🧠 Think first! Javobni ko'rishdan oldin kamida 30 soniya o'ylang.
<details> <summary>Answer</summary> 11 25Why?
getMonth() 0dan boshlanadi, shuning uchun 11 — bu dekabr (12-oy emas, index 11). getDate() esa oyning kunini to'g'ridan-to'g'ri (indekssiz) qaytaradi, shuning uchun 25.
Quyidagi kodda muammo bor:
script.jsJavaScriptlet birthDate = new Date(2000, 5, 15); // dasturchi iyun oyini yozmoqchi ediconsole.log(`Tug'ilgan sana: ${birthDate.getDate()}.${birthDate.getMonth()}.${birthDate.getFullYear()}`);// Kutilgan: "15.6.2000"// Haqiqiy: "15.5.2000"
Your Task:
Yechim:
</details>script.jsJavaScriptconsole.log(`Tug'ilgan sana: ${birthDate.getDate()}.${birthDate.getMonth() + 1}.${birthDate.getFullYear()}`);// "15.6.2000"
Date — sana va vaqtni ifodalovchi obyekt, oy 0dan boshlanadi.getFullYear, getMonth, getDate — sana qismlarini olish uchun.Timestamp — 1970-yildan beri o'tgan millisekundlar soni, sanalarni solishtirish uchun ishlatiladi.Intl.DateTimeFormat — sanani zamonaviy va to'g'ri formatlash usuli.getMonth() har doim 0dan boshlanadi — chiqishda +1 qilishni unutmang.getTime()) orqali sanalarni matematik solishtirish oson bo'ladi.padStart() — sonlarni ikki xonali formatga keltirishda foydali.Intl.DateTimeFormat — qo'lda formatlashdan ko'ra ishonchli va professional usul.Date.now() — joriy timestamp'ni to'g'ridan-to'g'ri, Date yaratmasdan olish usuli.script.jsJavaScriptlet now = new Date();now.getFullYear(); // yilnow.getMonth(); // oy (0-11)now.getDate(); // kun (1-31)now.getDay(); // hafta kuni (0-6)now.getHours(); // soatnow.getTime(); // timestamp (ms)Date.now(); // joriy timestampnew Intl.DateTimeFormat("uz-UZ").format(now);
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 3 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: