我有三个日期输入字段 - 日,月,年。 一旦输入,我应该验证它。使用以下代码:
$('#test').click(function(event) {
var daySelector = "#dd",
monthSelector = "#mm",
yearSelector = "#yyyy";
var day = $(daySelector).val() == "" ? 1 : parseInt($(daySelector).val(), 10);
var month = $(monthSelector).val() == "" ? 1 : parseInt($(monthSelector).val(), 10);
var year = parseInt($(yearSelector).val(), 10);
var date = new Date(year, month, day);
var result = !isNaN(date.getTime());
});
但它接受(即返回true
)错误的值,如33/55/2000。我的错误在哪里?
Demo
我已经尝试another approach - 它也不能很好用。
答案 0 :(得分:2)
Date对象自动转换溢出。
因此,如果您创建32.01.2000并且在1月只有31天,那么它将创建对象 01.02.2000日期
您必须将验证逻辑从“Is Nan”更改为更复杂的内容;)
有一点需要注意:)
date.getMonth()返回0-11 - > 0等于1月:P这是我在答案中最初错误的来源。 而且似乎你必须减少发送给Date构造函数的值。
答案 1 :(得分:0)
考虑现有的解决方案:
======
UPD 刚从其中一个框架中取出功能:
validateDay = function (day, year, month) {
var date = new Date(year, month, day);
return (date.getFullYear() === year &&
date.getMonth() === month &&
date.getDate() === day);
};