js判断是否为日期

JavaScript07

js判断是否为日期,第1张

这个,如果你接触过java,或者是sql语句的话就知道表示日期有很多格式(先不说分隔符多,光不同国家的标准来说也有很多),而且如果应用的话会根据需要判断某个字符串是否符合日期格式,所以无法给出答案。

不过用js判断日期除了你知道日期的格式,然后自己编写字符串处理及判断的方法以外,还有就是“正则表达式”(在字符串匹配中,这个非学不可)了。

我给你找了几个你看哪个是你需要的。

http://blog.csdn.net/weilee2009/article/details/8566962

http://hi.baidu.com/love5love/item/7fb622bb18b1afd084dd7993

typeof(Date)它返回的结果始终是一个字符串,对不同的操作数,它返回不同的结果二、对于字符串类型, typeof 返回的值是 string。比如typeof("123")返回的值是string。三、对于布尔类型, typeof 返回的值是 boolean 。比如typeof(true)返回的值是boolean。四、对于对象、数组、null 返回的值是 object 。比如typeof(window),typeof(document),typeof(null)返回的值都是object。五、对于函数类型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。六、如果运算数是没有定义的(比如说不存在的变量、函数或者undefined),将返回undefined。比如:typeof(sss)、typeof(undefined)都返回undefined。var r=/^\d{4}-\d{1,2}-\d{1,2}$/if(r.test(x.value)){alert()}

function check(date){

    return (new Date(date).getDate()==date.substring(date.length-2))

}

//参数date可以格式化为xx-xx-xx或xxxx-xx-xx或用/分割

附:

通常来说,javascript验证日期的有效性可以通过正则判断

但正则表达式无法精准验证日期的有效性,你无法通过正则表达式判断出1900-02-29是非法日期而2000-02-29是合法日期,而且正则表达式匹配起来比较繁琐。

要想精确验证,最容易想到的方法就是通过月份判断日期是否合法(1~28/29/30/31),你可以用一个数组表示每月的天数,如daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31],但你会发现daysInMonth[1]这个值可能是28或29,你又要写一个判断闰年的函数来解决这个问题......

这至少要花费20行以上的代码来完成这件事,而通过javascript中的Date对象,我们只需要1行代码即可完成上述功能。

function check(date){

return (new Date(date).getDate()==date.substring(date.length-2))

}

date为一个待检查的类日期字符串(如2013-01-01、2013/01/01、2013/01/32、2013/02/29),不论这个字符串是否正确

通过新建的Date对象(new Date(date)),可以识别出该日期是否正确,如果不正确则返回Invalid Date

但这样会有一个bug,当日期的值在1-31之间,new Date总返回一个新的对象,不论该月份是否存在这个日期(如2013-02-30将返回日期对象Sat Mar 02 2013 08:00:00 GMT+0800 (中国标准时间)),返回结果是下个月的日期而不报错

所以要用getDate()方法获取日期(new Date('2013-02-30')对象的getDate()方法将返回2)

date.substring(date.length-2)会获取到字符串最后两位也就是日期的部分,这与Date对象的日期部分做比较,如果相等则说明日期有效,否则为无效日期

如果日期无效则'=='左边值为NaN,右边无论是什么(''、null、undefined、NaN等)结果都为false