使用日期对象的javascript日期验证

kom*_*it1 2 javascript validation date

根据http://www.codingforums.com/archive/index.php/t-98569.html,可以使用javascript的日期对象完成日期验证.

我有一个类似的场景,我有单独的年,月,日期在单独的文本框中,通过正则表达式验证.现在我想利用JS的日期对象来检查像一个月的日子和闰年验证这样的东西不是通过RegExp验证完成的.但上面链接中讨论的内容对我来说并不适用.例如,

<script type="text/javascript">
   var dy= new Date(2001,2,30);
   alert(dy.getFullYear()+" "+dy.getMonth()+" "+dy.getDate());
</script>
Run Code Online (Sandbox Code Playgroud)

按原样返回日期.难道dy.getMonth()不应该返回-1这样的东西来表明2月份不存在30天吗?如果使用Date对象无法做到这一点,请提供一些替代方法来验证日期.

更新:我刚刚发现了另一个链接(http://internotredici.com/article/checkdateinjavascript/).PS:我正在研究JS1.2,它已经很老了.

ken*_*bec 6

您可以从日,月,年位开始生成日期,然后检查这些位是否正确.

function isvalid_mdy(s){
    var day, A= s.split(/\D+/).map(function(itm,i){return parseInt(itm,10)});
    A[0]-=1;
    try{
        day= new Date(A[2], A[0], A[1]);
        if(day.getMonth()== A[0] && day.getDate()== A[1]) return day;
        throw new Error('Bad Date ');
    }
    catch(er){
        return er.message;
    }
}
function isvalid_dmy(s){
    var day, A= s.split(/\D+/).map(function(itm,i){return parseInt(itm,10)});
    A[1]-=1;
    try{
        day= new Date(A[2], A[1], A[0]);
        if(day.getMonth()== A[1] && day.getDate()== A[0]) return day;
        throw new Error('Bad Date ');
    }
    catch(er){
        return er.message;
    }
}
Run Code Online (Sandbox Code Playgroud)