Пошук уроків, статей та іншого контенту
Створення дат, читання компонентів, порівняння та найпоширеніші пастки вбудованого об'єкта Date.
Дата — це не просто число чи рядок: потрібно вміти порівнювати дати, додавати до них дні/місяці, враховувати різну кількість днів у місяцях і високосні роки. Date — вбудований об'єкт, що інкапсулює всю цю логіку, зберігаючи момент часу як кількість мілісекунд від 1 січня 1970 року (Unix epoch).
const now = new Date(); // поточний момент
const specific = new Date(2026, 5, 15); // 15 червня 2026 — УВАГА: місяці рахуються з 0!
const fromString = new Date("2026-06-15"); // парсинг ISO-рядкаНайвідоміша пастка Date: місяці нумеруються від 0 (січень) до 11 (грудень) — new Date(2026, 5, 15) означає 15 червня, а не травня. День місяця (третій аргумент) при цьому звичайний, з 1.
const date = new Date(2026, 5, 15);
date.getFullYear(); // 2026
date.getMonth(); // 5 — знову 0-індексований, тобто "червень"
date.getDate(); // 15 — число місяця
date.getDay(); // день тижня: 0 (неділя) — 6 (субота)
date.getHours(); // 0, якщо не вказано часgetDate() повертає число місяця (1-31), а getDay() — день тижня (0-6). Схожі назви, абсолютно різне призначення — легко переплутати.
getTime() повертає кількість мілісекунд від Unix epoch — це те, що робить дати придатними для порівняння й арифметики, як звичайні числа:
const start = new Date(2026, 0, 1);
const end = new Date(2026, 11, 31);
const diffMs = end.getTime() - start.getTime();
const diffDays = Math.round(diffMs / (1000 * 60 * 60 * 24));
diffDays; // 364const deadline = new Date(2026, 11, 31);
const today = new Date();
today > deadline; // порівняльні оператори працюють — дата автоматично приводиться до числа мілісекунд
today.getTime() === deadline.getTime(); // для рівності потрібен getTime() — сам об'єкт Date порівнюється за посиланням, а не значеннямdate1 === date2 для двох різних об'єктів Date із однаковим моментом часу поверне false — це той самий принцип «референсні типи порівнюються за посиланням» із модуля «Змінні та типи даних». Для порівняння значень завжди використовуйте .getTime() або >/<.
const date = new Date(2026, 0, 30); // 30 січня
date.setDate(date.getDate() + 5); // додати 5 днів
date.getMonth(); // 1 — автоматично "перетік" у лютий, JavaScript сам рахує кількість днів у місяціНа відміну від рядків, Date — змінюваний (mutable) об'єкт: методи на кшталт setDate змінюють сам об'єкт, а не повертають новий. Якщо потрібно зберегти оригінальну дату незмінною, спершу створіть копію: new Date(originalDate).
toLocaleDateString форматує дату відповідно до мовних/регіональних налаштувань, без ручного складання рядка:
const date = new Date(2026, 5, 15);
date.toLocaleDateString("uk-UA"); // "15.06.2026"
date.toLocaleDateString("uk-UA", { day: "numeric", month: "long", year: "numeric" }); // "15 червня 2026 р."function daysUntil(targetDate) {
const diffMs = targetDate.getTime() - Date.now();
return Math.ceil(diffMs / (1000 * 60 * 60 * 24));
}
daysUntil(new Date(2026, 11, 31)); // кількість днів до кінця 2026 рокуЗабування, що місяці 0-індексовані — new Date(2026, 3, 1) означає квітень, не березень.
Порівняння двох об'єктів Date через === замість .getTime().
Мутація дати, отриманої ззовні (наприклад, як аргумент функції), замість роботи з копією.
Date зберігає момент часу як мілісекунди від 1970 року, з місяцями, нумерованими від 0 — найпоширеніша пастка новачків. getTime() дає число для порівняння й арифметики, setDate дозволяє додавати/віднімати дні з автоматичним переходом між місяцями, toLocaleDateString форматує дату для показу. Date — на відміну від рядків — змінюваний об'єкт: методи на кшталт setDate змінюють сам об'єкт.
Спробуйте самостійно
Напишіть функцію isWeekend(date), яка повертає true, якщо передана дата — субота чи неділя, використовуючи getDay().