今天遇到一个严重日期的问题,最开始想到是不是日期函数是不是有一个方法可以验证日期是否正确,然后找到js手册发现了Date.parse()这个方法,然后试了试:if(Date.parse(dateStr)){...}else{...} //dateStr格式:2011/11/11
由于自己用的是chrome作为调试的浏览器,试了试,发现屡试不爽,很是好用。但是出于怀疑的态度测试了一下IE6,奇怪的问题出现了,就是只要你格式正确了,Date.parse(dateStr)都是正确的,比如:Date.parse('2011/21/44')这样一看就不正确,但是在IE6下解析正确。这就让我头疼了,接着Google。
首先Google:Date.parse()发现没有好的说法,之后Google:JS验证日期,出来了一大篇,但是找了半天没找到一个自己中意的,原因是要么实在太长,要么我感觉没必要那么麻烦。
所以,想了想,思考了很久,然后开始试试IE6下这样不正常的字符串到底解析成什么样子的。然后是开始测试:
var d = new Date('2011/13/41');
alert(d.getYear()+'/'+(d.getMonth()+1)+'/'+d.getDay()) //2001/2/6 diff from 2011/13/41
然后就开始在这个得到的结果上做文章。大致思路就是,如果格式没有错误,非IE下Date.parse()也正确,那么就正确,如果IE下Date.parse下正确,那么再判断年月日是否和输入的是一样的。代码如下: