年份返回1901年

时间:2015-01-17 09:55:57

标签: javascript

我希望用户仅以 mm/dd/yyyy 格式输入日期。用户输入日期并提交表单后,我将验证日期值字段,如下所示:

function(value, element) {
            var date = new Date(value);
            if (isNaN(date))
                return false;
            var year = date.getFullYear();
            if (year.toString().length != 4)
            return false;
            return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
        }

然而,为了测试目的,当我输入日期为“ 12/12/01 ”时 - 我看到全年将以 1901 来实际是 2001 ,因为它是本世纪。

如何以 dd/mm/yyyy 格式正确检查用户输入日期?

2 个答案:

答案 0 :(得分:1)

这是一个检查用户输入正确日期的解决方案:

function isDate(str) {
  var m = str.match(/^(\d{2})\/(\d[1-12])\/(\d{4})$/);
  return (m) ? true : false;
}

现在只需用户输入的日期

来调用它
isDate('03/05/1991') ==> true

答案 1 :(得分:1)

您的问题有两个方面:

  1. 字符串格式是否正确?
  2. 它是否代表有效日期?
  3. 可以使用正则表达式测试所需格式,如:

    /\d\d\/\d\d\/\d{4}/;
    

    日期本身可以通过各种方式进行测试(包括一个很长的复杂正则表达式,其中的例子在这里),这种格式最简单的可能就是创建一个Date并测试结果。以下函数将解析n / n / n格式的字符串,如果它表示m / d / y格式的有效日期,则返回Date对象;如果不是,则返回NaN:

    // Treats 2 digit years as years 0 - 99, not 1900 to 1999
    function parseMDY(s) {
      var b = s.split(/\D/);
      var d = new Date();
      d.setHours(0,0,0,0);
      d.setFullYear(b[2], --b[0], b[1]);
      return d.getMonth() == b[0]? d : NaN;
    }
    

    因此,要验证日期,您可以使用以下内容:

    // Return true if s is a valid date in mm/dd/yyyy format
    function validateDate(s) {
      return !!(/\d\d\/\d\d\/\d{4}/.test(s) && parseMDY(s));
    }
    
    console.log(validateDate('30/02/2015')) // false  (invalid date)
    console.log(validateDate('02/02/2015')) // true   (valid date)
    console.log(validateDate('2/02/2015'))  // false  (incorrect format)
    

    这不会检测用户是否意外转换了月份和日期数字,但仍然生成了有效日期,因此01/02/20115可能代表2月1日而不是1月2日。以明确的格式反映输入日期有助于防止此类错误。