Javascript - Валидность даты

Как лучше узнать является ли дата правильной? Я знаю, как узнать является ли строка датой, но проблема в том, что на месяцах, которые содержат 30 дней этот алгоритм не работает при вводе даты, где день - 31.

То, что у меня сейчас есть:

yy = '2021';
mm = '02';
dd = '31';
const d = new Date(yy + '/' + mm + '/' + dd);
console.log(!isNaN(d.getTime()));


Ответы (2 шт):

Автор решения: NoSkill

Это конечно очень странно, что в JS до сих пор нет функции проверки валидности даты.

function isValidDate(Y, M, D) {
  var d = new Date(Y, --M, D);
  return Y == d.getFullYear() && M == d.getMonth() && D == d.getDate();
}

console.log('2020/02/28 - ' + isValidDate(2020, 2, 28));
console.log('2020/02/29 - ' + isValidDate(2020, 2, 29));
console.log('2020/02/30 - ' + isValidDate(2020, 2, 30));
console.log('2020/02/31 - ' + isValidDate(2020, 2, 31));

→ Ссылка
Автор решения: Qwertiy

function check(y, m, d) {
  y = +y, --m, d = +d
  var x = new Date(y, m, d)
  return x.getFullYear() === y && x.getMonth() === m && x.getDate() === d
}

console.log(check("2021", "02", "31"))
console.log(check(2000, 2, 29))
console.log(check(2001, 2, 29))
console.log(check(2007, 1, 1))
console.log(check(2012, 12, 32))

→ Ссылка