在javascript中如何让'02/27/2010'过关但是'02 / 31/2010'失败?

时间:2011-05-03 22:06:17

标签: javascript

当我输入'02 / 27/2010'时,它不是NaN。当我输入'02 / 31/2010'时,当我使用Date和getDate(“mydate”)函数时,它也不是NaN。它将改为3月3日?

有没有办法确定日期是否是真实日期,而不会增加跳到下个月或一年的天数?

谢谢, 马克

4 个答案:

答案 0 :(得分:2)

这是一种方式:

  String.prototype.isValidDate = function(){
    var arrDate = this.split("/");
    if(arrDate.length!=3)return false;
    var month = parseInt(arrDate[0],10);
    var day = parseInt(arrDate[1],10);
    var year = parseInt(arrDate[2],10);                                  
    var dateComp = new Date(year, month-1, day);
    return (month == dateComp.getMonth()+1 &&
            day == dateComp.getDate() && 
            year == dateComp.getFullYear());
  };

  alert("2/1/2011".isValidDate());  
  alert("2/31/2011".isValidDate());
  alert("02/01/2011".isValidDate());

Example

答案 1 :(得分:1)

您可以结帐datejs查看javascript中日期操作的所有内容。

答案 2 :(得分:0)

Detecting an "invalid date" Date instance in JavaScript看起来就是我能说的答案。

答案 3 :(得分:0)

//

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 'Bad Date ';
    }
    catch(er){
        return NaN;
    }
}
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 'Bad Date ';
    }
    catch(er){
        return NaN;
    }
}