在Javascript中验证日期

在Javascript中验证日期,javascript,Javascript,请注意,这似乎是一个被问了很多次的问题,但不知何故,我无法找到最常见的解决方案。 大多数答案都围绕这样一个解决方案: function isValidDate(){ var dateString = '2001/24/33'; return !isNaN(Date.parse(dateString)); } 在Firefox中,这将返回一个false作为该日期的结果。parse是一个数字;104146200000 如何解决此问题?一个好方法是基于字符串创建新的日期对象,并将该对象的结果

请注意,这似乎是一个被问了很多次的问题,但不知何故,我无法找到最常见的解决方案。 大多数答案都围绕这样一个解决方案:

function isValidDate(){
  var dateString = '2001/24/33';
  return !isNaN(Date.parse(dateString));
}
在Firefox中,这将返回一个false作为该日期的结果。parse是一个数字;104146200000


如何解决此问题?

一个好方法是基于字符串创建新的日期对象,并将该对象的结果与输入字符串进行比较。如果不相同,则该日期无效,JS将回退到更接近(有效)的日期。大概是这样的:

function isValidDate(str){
   var split = str.split('/');
   var date = new Date(split[0], split[1]-1, split[2]);

   return (date.getFullYear() == split[0] && date.getMonth()+1 == split[1] && date.getDate() == split[2]);
}
致电:

var isValid = isValidDate('2001/24/33');
注意:在这种情况下,输入字符串假定为特定格式。如果您确定它总是相同的格式,就不会有问题。如果没有,您需要在这段代码上做更多的工作

附带说明:如果您需要执行大量的日期操作,请使用。

我建议使用


非常酷的库。

return(Date.parse(dateString)>0)?我猜是
isNaN()
不是
isNaN()
@thenewidio对,但那是一个打字错误,问题出在我的opinion@Cobra_Fast但是数字已经>0了,不是吗?@Maarten是的,但是如果失败了,它可能会返回
false
null
或其他一些会导致测试失败的值。问题是
Date
类接受几种不同的创建格式。因此,这不会一直有效。@Cobra_尽管我可以按照自己的喜好快速格式化日期,但在处理之前,我会将日期从'dd-mm-yyyy'转换为'yyyy/mm/dd',Baszz'解决方案是否在所有浏览器中都有效?@Maarten是的,如果您能100%确定输入格式,然后它就可以工作了。请检查以下内容以验证日期:@ynos1234为什么这样更好?