0

这是我当前的日期验证功能:

  isValidDate = function(day,month,year) {
    var dteDate;
    dteDate=new Date(year,month,day);
    return ((day.toString()===dteDate.getDate().toString()) && (month.toString()===dteDate.getMonth().toString()) && (year.toString()===dteDate.getFullYear().toString()));
  }

然后我检查了这些字段:

checkFields = function() {
  var iDate = $("inspect_date").value;
  if(iDate.length > 0) {
    var a = iDate.split("/"); 
    if(isValidDate(a[0],a[1]-1,a[2]) == false){
      alert("You have entered an invalid date. Please amend!");
      return false;
    }

所以目前它不接受我想要的 dd/mm/yyy 格式的日期 - 该函数不喜欢前导零。

我试图以这种方式修复它:

isValidDate = function(day,month,year) {
  var dteDate;
  dteDate=new Date(year,month,day);

  var day = dteDate.getDate();
  var month = dteDate.getMonth() + 1;
  var year = dteDate.getFullYear();

  var formatted =
      (day < 10 ? "0" : "") + day + "/"  +
      (month < 10 ? "0" : "") + month + "/"  +
      year;

  return ((day.toString()===dteDate.getDate().toString()) && (month.toString()===dteDate.getMonth().toString()) && (year.toString()===dteDate.getFullYear().toString()));
}

但是现在我的“返回”部分在进行比较时包含错误的值。

任何人都可以帮忙吗?

4

1 回答 1

3

对于示例日期"02/04/2012",您的函数的第一个变体作为参数传递"02", 3, "2012"。然后,您的函数会尝试"02""2"明显“不相等”的函数进行比较。

您应该将数字作为数字进行比较。一元+运算符是将字符串转换为数字的快捷方式(+"01"yield 1;您也可以使用parseInt):

return
    +day === dteDate.getDate() && 
    +month === dteDate.getMonth() &&
    +year === dteDate.getFullYear();

这是使用 RegRx 和 JavaScript Date 对象验证日期的另一种方法。

于 2013-02-14T14:12:52.467 回答