1

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

$('#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。我的错误在哪里? 演示

我尝试了另一种方法- 它也效果不佳。

4

2 回答 2

2

日期对象自动转换溢出。

因此,如果您创建 32.01.2000 并且一月只有 31 天,那么它将创建日期为 01.02.2000 的对象

您必须将验证逻辑从“Is Nan”更改为更复杂的内容;)

需要注意的一件事:)

date.getMonth() 返回 0-11 -> 0 等于 1 月 :P 这是我在答案中最初错误的根源。似乎您必须减少发送给 Date 构造函数的值。

于 2012-04-09T20:22:07.057 回答
0

考虑现有的解决方案:

=========

UPD刚刚从以下框架之一中提取功能:

validateDay = function (day, year, month) {
    var date = new Date(year, month, day);
    return (date.getFullYear() === year &&
        date.getMonth() === month &&
        date.getDate() === day);
};​
于 2012-04-09T20:18:07.947 回答