所以我的问题是:
new Date('01/32/1980') //January 32, 1980 (invalid)
在Chrome中运行此javascript会导致“无效日期”
在Firefox中运行此JavaScript会导致日期为1980年2月1日
我见过很多问题,人们对浏览器之间的javascript日期解析器有不同的问题,但不是这个特定情况。
我需要在javascript中验证日期,但是像这样的东西在浏览器之间无法正常工作:
if(isNaN(new Date('1/32/1980').getTime())){
//I expect this to be a valid date
}else{
//I expect this to be an invalid date
}
他们通过Chrome解析“1/32/1980”,这是一个无效的日期,此代码可以正常工作并进入else块。在完全相同的情况下,Firefox显示有效并进入有效部分。
我错过了什么,有没有更好的方法来验证这个字符串?
答案 0 :(得分:0)
RegEx的潜在答案回应非常混乱,但仍然没有完全涵盖这一点。
我使用JQuery找到了一个更干净的解决方案:
$.datepicker.parseDate('mm/dd/yy','1/32/1980')
我把它包起来就像这样:
function isValidDate(strDate, strDateFormat){
try{
$.datepicker.parseDate(strFormat, strDate);
} catch (e) {
return false;
}
return true;
}
Jquery会抛出一个"无效的日期"所有浏览器中的异常。这完全符合我的需要。当然,这是用于小部件,但它的逻辑是非常稳固的社区测试。