-1

我使用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;
}
4

2 回答 2

1

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

内部日期对象增加月份以具有有效日期。

于 2012-04-09T11:54:41.783 回答
0

编码:

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

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

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

至于验证日期,使用 yyyy-mm-dd 格式的 ISO8601 兼容日期的简单函数是:

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。

于 2012-04-09T12:40:56.220 回答