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

时间:2015-07-23 13:36:27

标签: php

我正在使用格式如下的日期:

  

25/02/1994 - 15/03/2000

要获取每个日期,我使用explode函数来分隔破折号

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

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

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

2 个答案:

答案 0 :(得分:0)

$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
}

答案 1 :(得分:0)

你有一个良好的开端,在你将字符串展开-之后,只需使用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";
    }

?>