Learn JavaScript

Date() - создание даты и времени в JavaScript

Date - это встроенный объект JavaScript для работы с датой и временем.

Если говорить просто, через Date можно:

  • получить текущую дату и время
  • создать дату из строки или числа
  • хранить момент времени в объекте

Синтаксис

С Date есть важный нюанс: с new и без new он работает по-разному.

Чаще всего используют такие варианты:

new Date()
new Date(timestamp)
new Date(dateString)
new Date(year, monthIndex, day, hours, minutes, seconds, ms)
Date()

Где:

  • new Date() создаёт объект даты с текущими датой и временем
  • new Date(timestamp) создаёт дату из количества миллисекунд
  • new Date(dateString) создаёт дату из строки
  • new Date(year, monthIndex, ...) создаёт дату из числовых частей
  • Date() без new возвращает строку с текущими датой и временем

Date() и new Date() - это не одно и то же

Это самый важный момент в начале.

С new вы получаете объект Date:

const now = new Date();

console.log(now instanceof Date); // true

Без new вы получаете строку:

const result = Date();

console.log(typeof result); // "string"

Поэтому для нормальной работы с датой почти всегда используют именно new Date().

Текущая дата и время

Самый простой вариант - создать объект с текущим моментом времени.

const now = new Date();

console.log(now);

Такой объект хранит текущую дату и текущее время на момент создания.

Дата из timestamp

Date умеет создавать дату из timestamp.

Timestamp в JavaScript - это количество миллисекунд с 1 января 1970 года 00:00:00 UTC.

const date = new Date(0);

console.log(date.toISOString()); // "1970-01-01T00:00:00.000Z"

Это полезно, потому что внутри Date всё равно хранит время именно как число миллисекунд.

Дата из строки

Можно создать дату из строки.

const date = new Date("2025-01-15T10:30:00Z");

console.log(date.toISOString()); // "2025-01-15T10:30:00.000Z"

Для практики лучше всего использовать строку в ISO-формате, потому что она наиболее предсказуема.

Дата из чисел

Можно передать отдельные части даты численно.

const date = new Date(2025, 0, 15, 10, 30, 0);

console.log(date.getFullYear()); // 2025
console.log(date.getMonth()); // 0
console.log(date.getDate()); // 15
console.log(date.getHours()); // 10

Здесь важно помнить:

  • первый аргумент - год
  • второй аргумент - месяц
  • третий аргумент - день месяца

Месяцы начинаются с нуля

Это одна из самых частых ошибок.

В числовом конструкторе:

  • 0 - январь
  • 1 - февраль
  • 2 - март

И так далее.

const january = new Date(2025, 0, 1);
const february = new Date(2025, 1, 1);

console.log(january.getMonth()); // 0
console.log(february.getMonth()); // 1

Если написать new Date(2025, 1, 15), это будет не январь, а февраль.

Что на самом деле хранит Date

Объект Date хранит не “день”, “месяц” и “год” отдельно, а один момент времени.

При необходимости из него уже можно получить:

  • год
  • месяц
  • день
  • часы
  • минуты
  • секунды

Например:

const date = new Date("2025-01-15T10:30:00Z");

console.log(date.getTime());

getTime() возвращает timestamp в миллисекундах.

Как проверить, что дата некорректная

Если передать плохие данные, JavaScript создаст объект с состоянием Invalid Date.

const date = new Date("not-a-date");

console.log(String(date)); // "Invalid Date"
console.log(Number.isNaN(date.getTime())); // true

Это важно: ошибка не всегда выбрасывается сразу. Иногда вы просто получаете “сломанный” объект даты.

Date зависит от часового пояса

При выводе дата может показываться по местному часовому поясу пользователя.

Из-за этого одно и то же значение может выглядеть по-разному в разных местах.

Для стабильного формата часто используют:

const date = new Date("2025-01-15T10:30:00Z");

console.log(date.toISOString());

toISOString() особенно удобен в примерах, логах и передаче данных.

Когда это полезно

Date особенно нужен, когда:

  • надо получить текущую дату и время
  • нужно сохранить момент времени
  • требуется сравнить даты
  • необходимо вывести дату пользователю или отправить её на сервер

Пример:

const createdAt = new Date();

console.log(createdAt.toISOString());

Date и сравнение дат

Сравнивать даты удобнее через timestamp.

const start = new Date("2025-01-10T00:00:00Z");
const end = new Date("2025-01-15T00:00:00Z");

console.log(start.getTime() < end.getTime()); // true

Такой подход обычно понятнее и надёжнее.

Частые ошибки

Забывать new

const date = Date();

console.log(typeof date); // "string"

Если нужен объект даты, используйте new Date().

Считать, что январь - это 1

const date = new Date(2025, 1, 15);

Здесь месяц 1 - это февраль, а не январь.

Надеяться на случайный формат строки

new Date("15/01/2025");

Такие строки могут разбираться по-разному или вообще работать нестабильно. Лучше использовать ISO-формат вроде "2025-01-15T10:30:00Z".

Думать, что невалидная дата всегда выбросит ошибку

const date = new Date("not-a-date");

Часто вы получите Invalid Date, а не исключение.

Путать Date() и Date.now()

Date() без new возвращает строку, а Date.now() возвращает timestamp в миллисекундах.

Быстрая памятка

  • new Date() создаёт объект текущей даты и времени
  • Date() без new возвращает строку
  • Date хранит момент времени как timestamp
  • new Date(0) соответствует 1970-01-01T00:00:00.000Z
  • в числовом конструкторе месяцы начинаются с 0
  • для строк даты безопаснее использовать ISO-формат
  • невалидная дата даёт Invalid Date

Коротко

Date() в JavaScript нужен для работы с датой и временем, но почти всегда использовать нужно именно new Date(). Главное, что стоит запомнить: Date хранит момент времени, месяцы в числовом конструкторе начинаются с нуля, а Date() без new возвращает строку, а не объект даты.