实现方法
function isDate( $dateString ) { return strtotime( date(‘Y-m-d‘, strtotime($dateString)) ) === strtotime( $dateString ); } echo $this->isDate(‘2014-11-19‘) ? ‘true‘ : ‘false‘; echo ‘</br>‘; echo $this->isDate(‘2014-11-32‘)? ‘true‘ : ‘false‘; echo ‘</br>‘; echo $this->isDate(‘2014-a-b‘)? ‘true‘ : ‘false‘; echo ‘</br>‘; echo $this->isDate(‘2014-1-1‘)? ‘true‘ : ‘false‘; echo ‘</br>‘; echo $this->isDate(‘2014-01-01‘)? ‘true‘ : ‘false‘; /* 结果 true false false true true */
date(‘Y-m-d‘, strtotime($dateString)) 这段代码是将输入的时间字符串转换成unix时间戳(自1970-1-1 0:0:0起),然后再转回日期字符串。 如果输入的日期字符串格式不正确, 那么转换前的值与转换后的值是不一致的, 也就是说 date(‘Y-m-d‘, strtotime($dateString)) == $dateString 这句代码的结果将false。那为什么还要将上面的代码写成 strtotime( date(‘Y-m-d‘, strtotime($dateString)) ) === strtotime( $dateString ) 这样呢?因为将代码写成date(‘Y-m-d‘, strtotime($dateString)) == $dateString这样, 那么如果$dateString的值为2014-1-1这种格式( 一个合法的时间字符串),返回的结果也将为false, 因为date(‘Y-m-d‘,strtotime(‘2014-1-1‘))返回的结果为2014-01-01这个样子, 如果月份和日期为个位数, 会在前面自动补上0,从字符串比较的层面看2014-1-1很明显不等于2014-01-01, 所以需要在外层加上strtotime, 将两边的日期都转换成unix时间戳, 再进行比较。
原文地址:http://chhblog.com/article/294.html
时间: 2024-10-06 22:41:01