在php中检查有效日期无效


Checking a valid date in php not working

我已经将一个变量转换为unix时间戳,以检查它是否是有效日期。格式为年月日。我的代码低于

<?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是有效的,我不能更改日期的格式,因为它来自第三方平面文件。。。

可能是什么问题?

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

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

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

如果你做

strtotime('11/24/2013');

相反,它会起作用。

如果你想让你的日期保持这种格式,并且仍然使用strtotime,你可以做

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

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

当日期为$date1='yuyuy1909090'时,则为

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

在这种情况下,它会给出错误,所以最好为regex验证多添加一行

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';
    }
}