首页 > 代码库 > php判断日期格式是否合法

php判断日期格式是否合法

实现方法

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‘;/*结果truefalsefalsetruetrue*/    

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时间戳, 再进行比较。

php判断日期格式是否合法