验证日期以确保它们是有效的日期


Verifiying 2 date to make sure they're valid dates

我正在处理的日期格式如下:

25/02/1994 - 15/03/2000

为了获得每个日期,我使用爆炸函数来分隔破折号

之间的每个日期
$newdate = explode("-",$olddate);

现在我的问题是,如果它只是一个日期,我可以把它分成3部分,日,月,年,并使用checkdate函数来验证月份,但因为我使用的是爆炸,我不能像那样分割它(据我所知)

验证日期合法性的最佳方法是什么?

你有一个好的开始,在你用-分解你的字符串之后,只要简单地用array_reduce()循环遍历每个日期并将其减少到1值。

在匿名函数中,您只需explode()每个日期,并检查checkdate()是否为有效日期,例如

<?php
    $str = "25/02/1994 - 15/03/2000";
    $dates = explode("-", $str);
    if(array_reduce($dates, function($keep, $date){
        list($day, $month, $year) = array_map("trim",explode("/", $date));
        if(!checkdate($month, $day, $year))
            return $keep = FALSE;
        return $keep;
    }, TRUE)) {
        echo "all valid dates";
    }
?>
$date = '25/02/1994 - 15/03/2000';
$date_array = explode("-", $date);
$first_date = explode("/", trim($date_array[0]));
$second_date = explode("/", trim($date_array[1]));
if(checkdate($first_date[1],$first_date[0],$first_date[2])){
 //do stuff
}
if(checkdate($second_date[1],$second_date[0],$second_date[2])){
 //do stuff
}

或者,Daan建议使用DateTime对象。

$date = '25/02/1994 - 15/03/2000';
$date_array = explode("-", $date);
$date1 = DateTime::createFromFormat('j-M-Y', $date_array[0]);
$date2 = DateTime::createFromFormat('j-M-Y', $date_array[1]);
if($date1){
  //do stuff
}
if($date2){
  //do stuff
}