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‘;

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。