Javascript:日期自动递增+1值(将String转换为Date对象)

时间:2012-04-09 11:50:18

标签: javascript string validation date

我使用Date()函数将字符串转换为日期对象。问题是,如果我提供Date("April , 31 ,2012"),则会将其视为May , 01 , 2012(其余时间工作)请从下面的代码中检查我的方法是否正确。

function TestDate(objValue,strError){

    var ret=true;
    var frmdate=objValue.value;
    var datesplit=frmdate.split("-");
    var y =datesplit[0];
    var m=datesplit[1];
    var d=datesplit[2];
    var testdate;
    // Create date object using given input data
    testdate = new Date(m+"/"+d+"/"+y);
    alert("Created date"+testdate.toString());
    var td=testdate.getDate();
    var tm=testdate.getMonth()+1;
    var ty =testdate.getFullYear();
    alert(d+"="+td);
    alert(m+"="+tm);
    alert(y+"="+ty);
    var valid=((d==td) && (m==tm) && (y==ty));
    alert(valid);
    if(valid == false)
    {
        ret =false;
    }
    return ret;
}

2 个答案:

答案 0 :(得分:1)

正如@ajreal在评论中所说,四月只有30天。

内部日期对象将月份增加为有效日期。

答案 1 :(得分:0)

代码:

testdate = new Date(m+"/"+d+"/"+y);

取决于字符串的非标准,特定于实现的解析。最好使用您开始使用的数据来明确地创建日期:

testdate = new Date(y, m - 1, d);

对于验证日期,使用符合ISO8601标准的格式yyyy-mm-dd的简单函数是:

function validateDate(dateString) {
  var bits = dateString.split('-');
  var date = new Date(bits[0], bits[1] - 1, bits[2]);
  return date && date.getFullYear() == bits[0] && date.getDate() == bits[2];
} 

这样,如果传递给函数的字符串变为日期,则可以检查创建的日期是否与输入匹配。如果没有,则无效,函数返回false。如果字符串没有变成日期,它也会返回false。