new Date () не выдает исключение, если месяц или день находятся вне диапазона. Он использует внутренний MakeDay для вычисления даты (см. Спецификация языка ECMAScript разделы 15.9.3.1 и 15.9.1.13). Чтобы убедиться в правильности даты в приведенной ниже функции, входные данные преобразуются в целые числа, которые преобразуются в дату, а затем части даты сравниваются с целыми числами.
Поскольку дата использует MakeDay, вычисление maxDate работает, даже если сейчас - это день високосного (xxxx0229 будет yyyy0301, где yyyy = xxxx + 1)
function verifyDate(args)
{
var result=false,
match = args.Value.match(/^(\d{4})(\d{2})(\d{2})$/);
if (match && match.length === 4)
{
var year = parseInt(match[1],10),
month =parseInt(match[2],10) -1, // 0 = January
day = parseInt(match[3],10),
testDate= new Date(year,month,day),
now = new Date(),
maxDate = new Date(now.getFullYear() + 1, now.getMonth(), now. getDate()),
minDate = new Date(1800,0,1),
result = (
testDate.getFullYear() === year &&
testDate.getMonth() === month &&
testDate.getDate() === day &&
testDate >= minDate &&
testDate <= maxDate
);
}
args.IsValue = result;
return result;
}