我使用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;
}
答案 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。