Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

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

Короткий ответ

Внутри недействительной даты — NaN. Проверьте это через getTime():

const isValidDate = (date) => !Number.isNaN(date.getTime());
 
console.log(isValidDate(new Date('2025-06-15T10:00')));
console.log(isValidDate(new Date('hello')));

Результат:

true
false

Строка вида YYYY-MM-DD

new Date() тихо переносит 30 февраля на март. Соберите дату из частей и проверьте, что они не изменились:

const isValidYmd = (value) => {
  const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value);
  if (!match) return false;
  const [year, month, day] = match.slice(1).map(Number);
  const date = new Date(year, month - 1, day);
  return date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
};
 
console.log(isValidYmd('2024-02-29'));
console.log(isValidYmd('2025-02-29'));
console.log(isValidYmd('2025-13-01'));
console.log(isValidYmd('15.06.2025'));

Результат:

true
false
false
false

Дата в диапазоне

Для даты рождения проверьте ещё, что она не в будущем:

const birth = new Date(2090, 0, 1);
 
console.log(birth <= new Date() ? 'ok' : 'a date in the future');

Результат:

a date in the future

Частая ошибка

Конструктор Date не сообщает о неправильных днях, а переносит их дальше:

console.log(new Date(2025, 1, 30).toDateString());

Результат:

Sun Mar 02 2025

Функции из этого ответа

  • Date.parse — Разбирает строку с датой и возвращает метку времени.
  • Date.prototype.getTime — Возвращает дату как число миллисекунд.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.