如何验证日期输入到3个单独的字段?

时间:2012-04-09 20:13:23

标签: javascript date

我有三个日期输入字段 - 日,月,年。 一旦输入,我应该验证它。使用以下代码:

$('#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 - 它也不能很好用。

2 个答案:

答案 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);
};​