JavaScript验证日期是否存在

JavaScript验证日期是否存在,javascript,validation,date,Javascript,Validation,Date,我有一个YYMMDD格式的日期。我可以用JavaScript验证它吗? 我所说的验证并不是指长度、字符等简单的事情,而是指在现实生活中是否存在日期 我希望有一个更快/更好的方法,而不是把它分成3块2个字符,然后逐个检查 谢谢。尝试将其转换为日期,如果失败,您会得到可怕的NaN然后您知道它不是有效的日期字符串?不漂亮,但应该有用 var myDate = new Date(dateString); // should write out NaN document.write("Date : " +

我有一个YYMMDD格式的日期。我可以用JavaScript验证它吗? 我所说的验证并不是指长度、字符等简单的事情,而是指在现实生活中是否存在日期

我希望有一个更快/更好的方法,而不是把它分成3块2个字符,然后逐个检查


谢谢。

尝试将其转换为日期,如果失败,您会得到可怕的
NaN
然后您知道它不是有效的日期字符串?不漂亮,但应该有用

var myDate = new Date(dateString);
// should write out NaN
document.write("Date : " + myDate);

我认为您的问题中的
YYMMDD
不受支持

尝试将其转换为日期,如果失败,您会得到可怕的
NaN
然后您知道它不是有效的日期字符串?不漂亮,但应该有用

var myDate = new Date(dateString);
// should write out NaN
document.write("Date : " + myDate);

我认为你的问题中的YYMMDD格式不受支持

Javascript Date.parse不支持YYMMDD格式,因此你必须对其进行一些处理,比如将其拆分

我建议构建一个函数,将其拆分为3个2字符字符串,然后构建一个美式日期

MM/DD/YY,并尝试用Date.parse解析


如果它返回的不是NaN,那么它是一个有效的日期。

Javascript date.parse不支持YYMMDD格式,因此您必须对其进行一些处理,比如将其拆分

我建议构建一个函数,将其拆分为3个2字符字符串,然后构建一个美式日期

MM/DD/YY,并尝试用Date.parse解析


如果它返回的不是NaN,那么它是一个有效的日期。

JavaScript中的
日期解析器是非常无用的。它所接受的实际格式在不同浏览器之间有很大差异;ECMAScript标准保证工作的唯一格式是实现的
toString
toutString
方法产生的任何格式。在ECMAScript第五版中,您还将获得ISO-8166格式,该格式更接近您的格式,但仍然不尽相同

因此,最好的解决方案通常是自己解析它

var y= parseInt(s.slice(0, 2), 10)+2000;
var m= parseInt(s.slice(2, 4), 10)-1;
var d= parseInt(s.slice(4, 6), 10);
var date= new Date(Date.UTC(y, m, d));
现在有了一个
Date
对象,表示UTC中的输入日期。但这还不够,因为
Date
构造函数允许假月份(如13天)或假天数(如40天)环绕。因此,要检查给定的日期是否为真实日期,请将其转换回年/月/日并进行比较:

var valid= date.getUTCFullYear()===y && d.getUTCMonth()===m && d.getUTCDate()===d;

JavaScript中的
Date
解析器非常无用。它所接受的实际格式在不同浏览器之间有很大差异;ECMAScript标准保证工作的唯一格式是实现的
toString
toutString
方法产生的任何格式。在ECMAScript第五版中,您还将获得ISO-8166格式,该格式更接近您的格式,但仍然不尽相同

因此,最好的解决方案通常是自己解析它

var y= parseInt(s.slice(0, 2), 10)+2000;
var m= parseInt(s.slice(2, 4), 10)-1;
var d= parseInt(s.slice(4, 6), 10);
var date= new Date(Date.UTC(y, m, d));
现在有了一个
Date
对象,表示UTC中的输入日期。但这还不够,因为
Date
构造函数允许假月份(如13天)或假天数(如40天)环绕。因此,要检查给定的日期是否为真实日期,请将其转换回年/月/日并进行比较:

var valid= date.getUTCFullYear()===y && d.getUTCMonth()===m && d.getUTCDate()===d;

000229对2000年有效,但对1900年无效。因此,您需要考虑日期范围()000229对2000年有效,但对1900年无效。因此,你需要考虑你的约会范围(),这是一个好主意,而不是验证每一块。我可以得到缺少的YY,使其成为YYYYMMDD格式。我会试一试,让你知道。谢谢。这是个好主意,比验证每一块都好。我可以得到缺少的YY,使其成为YYYYMMDD格式。我会试一试,让你知道。非常感谢。