我在比较日期方面遇到了问题。我通过API从数据库中提取一个日期。这些日期存储在一个数组中,因为一列包含多个日期,我必须遍历它们才能找到下一个即将到来的日期。日期格式为:'dd / mm / yy'
$rawDate = $e->calendarsummary;
$filter = preg_replace("/[a-z]/","", $rawDate);
$createArray = explode(',', $filter);
$dates = array_filter(array_map('trim', $createArray));
foreach($dates as $d)
{
$dateTime = DateTime::createFromFormat('dmy', $d);
if($dateTime >= $now)
{
$finalDate = $dateTime;
$total = $finalDate->format('l j/m/y');
break;
}
}
如果我在$dateTime = DateTime::createFromFormat('dmy', $d);
之后放置$ dateTime的var_export,则返回'false'。所以我猜我的$ dateTime是空的虽然我的数组$ date被正确填充。
$ date的var_export返回:
数组(0 => '15 / 06/13',1 => '16 / 06/13',)
和$ export的出口今天返回日期:'16 / 06/13'
所以我有点卡住为什么我的变量$ DateTime仍为空?
编辑:显然,'false'的返回意味着它是一个错误,所以从数组格式化日期时出了什么问题?
答案 0 :(得分:0)
$dateTime = DateTime::createFromFormat('d/m/y', $d);
不
$dateTime = DateTime::createFromFormat('dmy', $d);
答案 1 :(得分:0)
您的日期格式为d/m/y
,而不是dmy
。请尝试以下方法:
$dateTime = DateTime::createFromFormat('d/m/y', $d);
当我这样做时,我得到:
class DateTime#1 (3) { public $date => string(19) "2013-06-15 17:17:12" public $timezone_type => int(3) public $timezone => string(3) "UTC" }
...而不是bool(false)
。
答案 2 :(得分:0)
如果$dates
数组包含15/06/13
等元素,请使用错误的日期格式。 E.g:
$dateTime = DateTime::createFromFormat('d/m/y', $d);
答案 3 :(得分:0)
您可以使用 strtotime 作为其他方法。
$now = date('d/m/y');
foreach($dates as $d)
{
if(strtotime($d) >= strtotime($now))
{
$finalDate = $dateTime;
$total = date('l j/m/y', strtotime($d));
break;
}
}