Я бы использовал Moment.js для этой задачи. Это позволяет очень просто анализировать даты, а также предоставляет поддержку для обнаружения неверной даты 1 в правильном формате. Например, рассмотрим этот пример :
var formats = ['MM-DD-YYYY', 'MM/DD/YYYY']
moment('11/28/1981', formats).isValid() // true
moment('2-29-2003', formats).isValid() // false (not leap year)
moment('2-29-2004', formats).isValid() // true (leap year)
Первый moment(.., formats)
используется для анализа ввода в соответствии с предоставленным локализованным форматом. Затем вызывается функция isValid
для результирующего объекта момента, чтобы мы могли на самом деле определить, является ли она действительной датой.
Это можно использовать для тривиального получения метода isValidDate:
String.prototype.isValidDate = function() {
var formats = ['MM-DD-YYYY', 'MM/DD/YYYY'];
return moment("" + this, formats).isValid();
}
1 Поскольку я могу найти небольшой небольшой комментарий по этому вопросу, я бы использовал moment.js только для дат, охватываемых григорианским календарем . Могут быть плагины для других (в том числе исторических или научных) календарей.