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хранит момент времени как timestampnew Date(0)соответствует1970-01-01T00:00:00.000Z- в числовом конструкторе месяцы начинаются с
0 - для строк даты безопаснее использовать ISO-формат
- невалидная дата даёт
Invalid Date
Коротко
Date() в JavaScript нужен для работы с датой и временем, но почти всегда использовать нужно именно new Date(). Главное, что стоит запомнить: Date хранит момент времени, месяцы в числовом конструкторе начинаются с нуля, а Date() без new возвращает строку, а не объект даты.