Learn JavaScript

new Date() - конструктор объекта даты и времени в JavaScript

new Date() создаёт объект даты и времени в JavaScript.

Если говорить просто, это основной способ получить объект Date, с которым потом можно работать через методы вроде getTime(), getFullYear(), toISOString() и другие.

Синтаксис

Конструктор new Date() можно вызывать по-разному:

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

Где:

  • без аргументов создаётся текущая дата и время
  • с числом создаётся дата из timestamp
  • со строкой создаётся дата из строки
  • с набором чисел создаётся дата из отдельных частей
  • с другим объектом Date создаётся его копия

Что возвращает new Date()

new Date() возвращает именно объект Date.

const now = new Date();

console.log(now instanceof Date); // true
console.log(typeof now); // "object"

Это важно: new Date() возвращает объект, а не строку.

new Date() без аргументов

Если аргументов нет, создаётся текущая дата и текущее время.

const now = new Date();

console.log(now);

Такой вариант используют чаще всего.

new Date(timestamp)

Если передать одно число, JavaScript воспримет его как количество миллисекунд с 1 января 1970 года 00:00:00 UTC.

const date = new Date(0);

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

Это и есть timestamp в JavaScript.

Важная ловушка: одно число - это не год

Это очень частая ошибка.

const date = new Date(2025);

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

Здесь 2025 воспринимается не как год, а как 2025 миллисекунд после начала эпохи.

Если нужен именно год, нужно использовать вариант с несколькими числами:

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

new Date(dateString)

Если передать строку, JavaScript попытается разобрать её как дату.

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

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

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

Дата из строки без времени

Строка вроде "2025-01-15" тоже может быть разобрана, но здесь легко столкнуться с путаницей из-за часового пояса.

const date = new Date("2025-01-15");

console.log(date);

Такой вариант может отображаться не так, как вы ожидаете в локальном времени пользователя.

Если нужна дата через отдельные числа, часто надёжнее написать так:

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

new Date(year, monthIndex, day...)

Можно создать дату из набора чисел.

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) - это февраль, а не январь.

Необязательные части даты

Если вы не передаёте все числовые части, оставшиеся значения подставляются автоматически.

const date = new Date(2025, 0);

console.log(date);

В таком случае получится 1 января 2025 года в 00:00:00.

new Date(dateObject) создаёт копию

Если передать уже существующий объект Date, будет создана новая копия с тем же моментом времени.

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

console.log(original.getTime() === copy.getTime()); // true
console.log(original === copy); // false

Это полезно, когда нужно не переиспользовать старый объект, а сделать отдельную дату.

Что хранит объект Date

Объект Date хранит один момент времени.

Получить его как число можно через getTime():

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

console.log(date.getTime());

Это число миллисекунд, которое удобно для сравнения и вычислений.

Некорректная дата

Если передать неподходящие данные, можно получить Invalid Date.

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

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

Это важный момент: конструктор не всегда выбрасывает ошибку, иногда он создаёт невалидный объект даты.

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

Эти варианты очень легко перепутать.

new Date() возвращает объект:

const date = new Date();

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

Date() без new возвращает строку:

const result = Date();

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

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

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

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

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

Пример:

const createdAt = new Date();

console.log(createdAt.toISOString());

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

Забывать new

const date = Date();

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

Без new вы не получаете объект даты.

Передавать один год числом и ждать дату этого года

new Date(2025);

Такой вызов означает 2025 миллисекунд, а не год 2025.

Забывать, что месяцы начинаются с нуля

new Date(2025, 1, 15);

Это февраль, а не январь.

Использовать нестабильный формат строки

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

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

Не проверять Invalid Date

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

Если дата может прийти из внешнего источника, полезно проверять date.getTime().

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

  • new Date() создаёт объект даты и времени
  • один числовой аргумент - это timestamp в миллисекундах
  • один числовой аргумент не означает год
  • строки даты лучше передавать в ISO-формате
  • числовой конструктор использует локальное время
  • месяцы в числовом конструкторе начинаются с 0
  • new Date(existingDate) создаёт копию даты
  • невалидный ввод даёт Invalid Date

Коротко

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