我希望用户仅以 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
格式正确检查用户输入日期?
答案 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)
您的问题有两个方面:
可以使用正则表达式测试所需格式,如:
/\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日。以明确的格式反映输入日期有助于防止此类错误。