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格式输入日期”。