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 вы получите не объект даты, а строку.