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

Javascript 如何验证输入到3个单独字段中的日期?,javascript,date,Javascript,Date,我有三个输入日期的字段-日、月、年。 一旦输入,我应该验证它。使用以下代码: $('#test').click(function(event) { var daySelector = "#dd", monthSelector = "#mm", yearSelector = "#yyyy"; var day = $(daySelector).val() == "" ? 1 : parseInt($(daySelector).val(), 10);

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

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


我已经试过了,但效果也不好。

考虑一下现有的解决方案:

=========

UPD刚刚从其中一个框架中取出功能:

validateDay = function (day, year, month) {
    var date = new Date(year, month, day);
    return (date.getFullYear() === year &&
        date.getMonth() === month &&
        date.getDate() === day);
};​

日期对象自动转换溢出

因此,如果您创建32.01.2000,并且一月份只有31天,那么它将使用 2000年2月1日

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

有一点需要注意:)

date.getMonth()返回0-11->0等于一月:p这是我在答案中最初错误的来源。
而且似乎必须递减发送给日期构造函数的值。

当为null或空时,可以使用| |而不是三元运算符作为默认值。。x=x | | 1。。不是你的答案,但更容易阅读。你有没有可能使用日历或其他单字段查找?3个独立日期字段的用户体验还有待改进。是的,如果您使用jquery ui datepicker之类的工具,就不必担心输入无效。。我也不知道。@PatrickScott,但我尝试了不同的值,它似乎是这样工作的:O只需在问题提供的JSFIDLE中尝试,似乎我错了,因为2000年1月有31天:O@michal你说的是对的,但你键入的是错的,我希望:-)1月31日。。你的例子应该是feb和marchyes,date.getTime()将始终是一个数字,因为溢出转换,所以它将成为你的更新-请看我问题的结尾,我在这里提到了另一种方法-这与你给出的方法相同。它不起作用,日期2000年2月30日被视为有效。@LA_u也许你忘记了月份指数从0开始。所以1月=0,2月=1(不是2)再次检查这个,它工作正常