Сана ва вақт
Ин барои чӣ лозим аст
Санаҳо қариб дар ҳар барнома ҳастанд: вақти паём дар чат, мӯҳлати расонидан, «3 рӯз пеш нашр шуд», тақвим,
таймер то охири аксия, синну соли корбар. Дар JavaScript барои ин объекти дарунсохти Date ҳаст. Вай якчанд
дом дорад, ки барномаҳои навомӯзонро — ва барномасозони ботаҷрибаро ҳам — мешикананд. Онҳоро дида мебароем.
Сохтани сана
const now = new Date(); // лаҳзаи ҷорӣ
const newYear = new Date(2026, 0, 1); // 1 январи 2026, 00:00 бо вақти маҳаллӣ
const iso = new Date("2026-11-02"); // аз сатр дар формати ISO
const fromMs = new Date(0); // аз тамғаи вақт
console.log(newYear.getFullYear(), newYear.getMonth(), newYear.getDate());
Натиҷа:
2026 0 1
Доми асосӣ: моҳҳо аз сифр ҳисоб мешаванд. Январ — 0, феврал — 1, декабр — 11. Рӯзҳои моҳ бошанд — аз
як, мисли одатӣ. Барои ҳамин ҳангоми нишон додани моҳ getMonth() + 1 менависанд.
Тамғаи вақт
Дар дохил Date як адад-ро нигоҳ медорад — чанд миллисония аз 1 январи соли 1970 бо вақти Гринвич (UTC)
гузаштааст. Ин ададро тамғаи вақт (timestamp) меноманд:
console.log(new Date(0).toISOString());
console.log(new Date("2026-01-01T00:00:00Z").getTime());
Натиҷа:
1970-01-01T00:00:00.000Z
1767225600000
Тамғаи ҷорӣ — Date.now(). Онро барои чен кардани вақт истифода мебаранд:
const start = Date.now();
for (let i = 0; i < 1e6; i++) {}
console.log("Давра камтар аз як сония гирифт: " + (Date.now() - start < 1000));
Натиҷа:
Давра камтар аз як сония гирифт: true
Қисмҳои сана
| Гирифтан | Чӣ бармегардонад |
|---|---|
getFullYear() |
сол, масалан 2026 |
getMonth() |
моҳ 0–11 |
getDate() |
рӯзи моҳ 1–31 |
getDay() |
рӯзи ҳафта 0–6, ки дар он 0 — якшанбе |
getHours(), getMinutes(), getSeconds() |
вақт |
getTime() |
тамғаи вақт |
const d = new Date(2026, 10, 2, 14, 5); // 2 ноябри 2026, 14:05
const days = ["яш", "дш", "сш", "чш", "пш", "ҷм", "шб"];
console.log(days[d.getDay()]);
console.log(`${d.getHours()}:${String(d.getMinutes()).padStart(2, "0")}`);
Натиҷа:
дш
14:05
Барои ҳар get… як set… ҳаст: setFullYear, setMonth, setDate, setHours…
Сана худаш ислоҳ мешавад
Агар рӯзи «вуҷуднадошта»-ро нишон диҳед, Date зиёдатиро ба моҳи навбатӣ мегузаронад. Ин хато нест, балки
асбоби қулай аст:
console.log(new Date(2026, 1, 30).getDate(), new Date(2026, 1, 30).getMonth()); // 30 феврал?
const d = new Date(2026, 11, 30);
d.setDate(d.getDate() + 5); // плюс 5 рӯз
console.log(d.getFullYear(), d.getMonth(), d.getDate());
const lastDay = new Date(2024, 2, 0); // «сифрум»-и март = рӯзи охири феврал
console.log(lastDay.getDate());
Натиҷа:
2 2
2027 0 4
29
30 феврал 2 март шуд, 30 декабр + 5 рӯз — 4 январи соли оянда, ва рӯзи 0 рӯзи охири моҳи пешинаро медиҳад
(дар соли 2024 феврал 29 рӯз дошт).
Фарқи байни санаҳо
Агар як санаро аз дигаре тарҳ кунед, фарқ бо миллисонияҳо ҳосил мешавад. Барои ба рӯзҳо гузарондан ба шумораи
миллисонияҳо дар як шабонарӯз тақсим мекунанд: 1000 * 60 * 60 * 24 = 86400000:
const start = new Date("2026-09-01");
const end = new Date("2026-12-31");
const days = Math.round((end - start) / 86400000);
console.log("Рӯзҳо то охири сол: " + days);
Натиҷа:
Рӯзҳо то охири сол: 121
Math.round аз сабаби гузариш ба вақти тобистона дар баъзе кишварҳо лозим аст: он гоҳ дар шабонарӯз 23 ё 25
соат мешавад.
ISO ва минтақаҳои вақт
Формати боэътимодтарини сана дар сатр — ISO 8601: 2026-11-02T14:05:00Z. Ҳарфи Z маънои «вақт бо UTC»-ро
дорад. Онро серверҳо ва JSON истифода мебаранд:
const d = new Date(Date.UTC(2026, 10, 2, 9, 30));
console.log(d.toISOString());
console.log(JSON.stringify({ created: d }));
Натиҷа:
2026-11-02T09:30:00.000Z
{"created":"2026-11-02T09:30:00.000Z"}
Ҳамон як лаҳзаи вақт дар кишварҳои гуногун гуногун менамояд: 09:30 бо UTC — ин 14:30 дар Душанбе (UTC+5) ва 12:30 дар Маскав (UTC+3) аст. Барои ҳамин:
getHours(),getDate()ва дигарҳо вақтро бо минтақаи вақти компютер бармегардонанд;getUTCHours(),getUTCDate()… — бо UTC;new Date("2026-11-02")(танҳо сана) ҳамчун нисфишаб бо UTC таҳлил мешавад,new Date(2026, 10, 2)бошад — ҳамчун нисфишаб бо вақти маҳаллӣ.
Қоида: санаҳоро бо UTC (сатри ISO ё тамғаи вақт) нигоҳ доред ва фиристед, ва ба вақти маҳаллӣ танҳо ҳангоми нишон додан ба корбар гузаронед.
Намоиши зебо барои одамон
toLocaleDateString ва toLocaleTimeString санаро аз рӯи қоидаҳои забон формат мекунанд:
const d = new Date(Date.UTC(2026, 10, 2, 9, 30));
console.log(d.toLocaleDateString("ru-RU", { timeZone: "UTC" }));
console.log(d.toLocaleDateString("en-US", { timeZone: "UTC" }));
console.log(d.toLocaleDateString("en-US", { day: "numeric", month: "long", year: "numeric", timeZone: "UTC" }));
Натиҷа:
02.11.2026
11/2/2026
November 2, 2026
Бе timeZone минтақаи вақти корбар истифода мешавад — дар сайтҳо одатан маҳз ҳамин лозим аст.
Дар дохил чӣ гуна кор мекунад
Date — ин печонаки як адади тамға аст. Ҳамаи get… сол, моҳ ва соатро аз ин адад бо назардошти минтақаи вақт
ҳисоб мекунанд, ва set… тамғаро аз нав ҳисоб мекунанд. Барои ҳамин ду санаро тавассути тамғаҳо муқоиса
мекунанд: a.getTime() === b.getTime(). a === b-и оддӣ объектҳо-ро муқоиса мекунад ва ҳатто барои санаҳои
якхела false медиҳад, аммо < ва > кор мекунанд, чунки санаҳоро ба ададҳо табдил медиҳанд.
Объекти Date тағйирёбанда аст: setDate онро дар ҷояш иваз мекунад. Агар сана аз берун ба функсия омада
бошад ва онро ҷобаҷо кардан лозим бошад, аввал нусха созед: const copy = new Date(date);.
Барои кори мураккаб бо санаҳо (минтақаҳои вақт, «баъд аз 2 моҳ», тақвимҳо) дар лоиҳаҳо аксар вақт китобхонаҳои
date-fns ё dayjs-ро истифода мебаранд, ва дар версияҳои нави JavaScript Temporal-и дарунсохт пайдо мешавад.
Хатоҳои маъмул
- Моҳ аз сифр.
new Date(2026, 1, 1)— ин 1 феврал аст. Ҳангоми нишон додан —getMonth() + 1. getDayба ҷойиgetDate.getDay— рӯзи ҳафта,getDate— рақами моҳ.- Синну сол бо тақсим ба 365. Солҳои кабиса хатои як-ду рӯзро медиҳанд. Солҳо, моҳҳо ва рӯзҳоро муқоиса кунед.
- Муқоиса бо
===.getTime()-ро муқоиса кунед. - Санаи бегонаро иваз карданд.
setDateобъектро иваз мекунад — нусха созед. - Сатр дар формати номафҳум.
new Date("02.11.2026")-ро браузерҳои гуногун гуногун мефаҳманд. ISO2026-11-02ё ададҳоро истифода баред.
Ёддошт
| Чӣ | Чӣ тавр |
|---|---|
| Ҳозир | new Date(), тамға — Date.now() |
| Санаи мушаххас | new Date(2026, 10, 2) (моҳ аз сифр!) |
| Аз ISO | new Date("2026-11-02T14:05:00Z") |
| Қисмҳо | getFullYear(), getMonth() + 1, getDate(), getDay() |
| Ҷобаҷо кардан | d.setDate(d.getDate() + 7) |
| Фарқ бо рӯзҳо | Math.round((b - a) / 86400000) |
| Ба ISO | d.toISOString() |
| Барои одамон | d.toLocaleDateString("ru-RU") |
| Ду рақам | String(n).padStart(2, "0") |