Javascript 年份返回为1901年

Javascript 年份返回为1901年,javascript,Javascript,我希望用户仅以mm/dd/yyyy格式输入日期。用户输入日期并提交表单后,我验证日期值字段,如下所示: function(value, element) { var date = new Date(value); if (isNaN(date)) return false; var year = date.getFullYear(); if (year.toString

我希望用户仅以
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
,因为现在是本世纪


如何将check user(检查用户)更正为在以下格式中输入的日期:
dd/mm/yyyy
以下是检查用户是否输入了正确日期的解决方案:

function isDate(str) {
  var m = str.match(/^(\d{2})\/(\d[1-12])\/(\d{4})$/);
  return (m) ? true : false;
}
现在用用户输入的日期简单地调用它

isDate('03/05/1991') ==> true

你的问题有两个方面:

  • 字符串的格式正确吗
  • 它代表有效日期吗
  • 可以使用以下正则表达式测试所需的格式:

    /\d\d\/\d\d\/\d{4}/;
    
    日期本身可以通过各种方式进行测试(包括一个长的复杂正则表达式,示例如下),这种格式最简单的方法可能是创建一个日期并测试结果。以下函数将解析n/n/n格式的字符串,如果以m/d/y格式表示有效日期,则返回Date对象;如果不以m/d/y格式表示有效日期,则返回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)
    

    这将无法检测用户是否意外地转置了月和日编号,但仍然生成了有效日期,因此20115年2月1日可能表示2月1日,而不是1月2日。以明确的格式反映输入日期有助于防止此类错误。

    在尝试将其转换为日期对象之前测试该值。奇怪。这不应该发生。所有年份00到15都应该返回20###,而16到99应该返回19##?在将值转换为日期对象之前,请使用正则表达式检查该值。但是可以。当日期不是mm/dd/yyyy格式时返回错误修复了此问题。请勿使用日期构造函数分析字符串。对于指定的格式,它取决于实现。大多数浏览器将两位数的年份视为20世纪的年份,加上1900。感谢您提供的解决方案
    isDate('2/30/2015')
    给出了它应该返回的时间
    true
    。现在它返回的“02/28/2015”为false,这是一个有效日期(根据OP格式)。函数不检查字符串是否实际表示有效日期,仅当它包含符合简单模式的字符时才检查。@RobG此问题中询问的格式是dd/mm/yyyy。因此,根据该表达式,我的函数是正确的。@AdnanAhmed请参见OP:“我希望用户以mm/dd/yyyy格式输入日期”。