JS Core

Дата и время (Date)

Научиться работать с датами и временем в JavaScript: создавать, форматировать, вычислять разницу между датами.

Начальный (Beginner)

Кратко

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 — как календарь с часами. Вы создаёте дату (открываете календарь на определённый день) и спрашиваете: «Какой сегодня месяц? Сколько времени?»


Примеры

**Самый простой:**

javascript
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());     // 15

new Date() создаёт объект с текущей датой. Месяцы начинаются с 0.

**Простой:**

javascript
const birthday = new Date(2000, 5, 15); // 15 июня 2000

const today = new Date();
const age = today.getFullYear() - birthday.getFullYear();

console.log(`Возраст: ${age} лет`);

Вычисляем возраст, вычитая год рождения из текущего года.

**Реальный пример:**

javascript
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: как превращать данные в текст и обратно.

Материалы курса JS Core — PROlab Academy.