在我的日期验证中加入前导零

时间:2013-02-14 13:56:51

标签: javascript validation date

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

  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()));
}

但现在我的'return'部分在进行比较时包含了错误的值。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

对于示例日期"02/04/2012",函数的第一个变体将"02", 3, "2012"作为参数传递。然后,您的函数会尝试将"02""2"进行比较,这显然是&#34;不等于&#34;。

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

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

Here is another way to validate dates使用RegRx和JavaScript Date对象。