Кратко
Date — встроенный объект для работы с датами и временем. new Date() создаёт объект с текущей датой. Методы позволяют получить год, месяц, день, часы, минуты и т.д.
Подробно
Создание Date: new Date() — текущая дата и время new Date('2025-01-15') — конкретная дата new Date(2025, 0, 15) — год, месяц (с 0!), день new Date(2025, 0, 15, 10, 30) — + часы, минуты
Важно: месяцы нумеруются с 0! January = 0, February = 1, ..., December = 11
Основные методы: .getFullYear() — год .getMonth() — месяц (с 0!) .getDate() — день месяца .getHours() — часы .getMinutes() — минуты .getSeconds() — секунды .getDay() — день недели (0 = воскресенье)
Форматирование: .toLocaleDateString() — '15.01.2025' .toLocaleTimeString() — '10:30:00' .toISOString() — '2025-01-15T10:30:00.000Z'
Вычисления: const diff = date2 - date1; // разница в миллисекундах Math.floor(diff / (1000 * 60 * 60 * 24)); // дни
Ментальная модель
Date — как календарь с часами. Вы создаёте дату (открываете календарь на определённый день) и спрашиваете: «Какой сегодня месяц? Сколько времени?»
Примеры
**Самый простой:**
const now = new Date();
console.log(now); // Mon Jan 15 2025 10:30:00
console.log(now.getFullYear()); // 2025
console.log(now.getMonth()); // 0 (January!)
console.log(now.getDate()); // 15new Date() создаёт объект с текущей датой. Месяцы начинаются с 0.
**Простой:**
const birthday = new Date(2000, 5, 15); // 15 июня 2000
const today = new Date();
const age = today.getFullYear() - birthday.getFullYear();
console.log(`Возраст: ${age} лет`);Вычисляем возраст, вычитая год рождения из текущего года.
**Реальный пример:**
function formatRelative(date) {
const now = new Date();
const diff = now - date;
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
if (days === 0) return 'Сегодня';
if (days === 1) return 'Вчера';
if (days < 7) return `${days} дней назад`;
return date.toLocaleDateString('ru-RU');
}
console.log(formatRelative(new Date())); // 'Сегодня'Функция форматирования даты: определяет, как давно была создана дата.
Частые ошибки
**Неправильно:** Забывать, что месяцы начинаются с 0
**Почему:** getMonth() для января возвращает 0, а не 1. Это частый источник ошибок.
**Правильно:** January = 0, February = 1, ..., December = 11.
**Неправильно:** Сравнивать даты через ===
**Почему:** Date — это объект. Два new Date() с одинаковой датой — разные объекты (=== не сработает).
**Правильно:** Сравнивайте через getTime(): date1.getTime() === date2.getTime().
**Неправильно:** Использовать Date.parse() для валидации
**Почему:** Date.parse() может вернуть NaN для невалидных дат, но это неочевидно.
**Правильно:** Проверяйте: !isNaN(date.getTime()).
Важно запомнить
- Месяцы нумеруются с 0 (January = 0!)
- Date — объект, сравнивайте через getTime()
- Разница дат — в миллисекундах
- toLocaleDateString() для красивого форматирования
Связь
Назад: Вы знаете объекты и методы (J11-J18) — Date это ещё один встроенный объект.
Вперёд: Следующий урок (J20) — JSON: как превращать данные в текст и обратно.