检查php中的有效日期无效

时间:2013-11-25 08:54:27

标签: php validation datetime

我已将一个变量转换为unix时间戳,以确定它是否为有效日期 .Format是dd / mm / yy。我的代码在

之下
<?php
$date1='24/11/2013';
$date2='09/11/2013';
$date3='yuyuy1909090';//CAN BE ANYTHING

if(strtotime($date1)>0){
    echo "valid date1";
}
if(strtotime($date2)>0){
    echo "valid date2";
}
if(strtotime($date3)>0){
    echo "valid date2";
}   


?>

但如果只说$date2有效,我就无法更改日期格式,因为它来自第三方平面文件......

可能是什么问题?

3 个答案:

答案 0 :(得分:5)

如果您知道有效格式,可以使用:

$date = DateTime::createFromFormat('d/m/Y', $date1);
if ( $date->getTimestamp() > 0 ) {
  echo 'valid date1';
}

答案 1 :(得分:1)

因为strtotime认为24/11/2013是美国格式,因为带有斜杠的日期被解释为m/d/y,并且第24个月没有第11个,所以它失败了。

如果你做了

strtotime('11/24/2013');
相反,它会起作用。

如果您想以该格式保留日期并仍使用strtotime,则可以

strtotime(str_replace('/', '-', '24/11/2013'));

带连字符的日期被解释为d-m-y格式

答案 2 :(得分:0)

当日期为$date1='yuyuy1909090'

$date = DateTime::createFromFormat('d/m/Y', $date1);
if ( $date->getTimestamp() > 0 ) {
  echo 'valid date1';
}

在这种情况下,它会产生错误,因此最好为正则表达式验证添加一行

if(preg_match("/^\d{1,2}\/\d{1,2}\/\d{4}/",$date1){
  $date = DateTime::createFromFormat('d/m/Y', $date1);
    if ( $date->getTimestamp() > 0 ) {
      echo 'valid date1';
    }
}