我正在使用格式如下的日期:
25/02/1994 - 15/03/2000
要获取每个日期,我使用explode函数来分隔破折号
之间的每个日期$newdate = explode("-",$olddate);
现在我的问题是,如果它只是一个日期我可以将它分成3个部分,日,月,年并使用checkdate函数来验证月份,但因为我使用爆炸我不能拆分它像那样(据我所知)
验证合法性日期的最佳方法是什么?
答案 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";
}
?>