我的变量没有被填充,仍然是空的

时间:2013-06-16 17:12:22

标签: php date compare

我在比较日期方面遇到了问题。我通过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'的返回意味着它是一个错误,所以从数组格式化日期时出了什么问题?

4 个答案:

答案 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;
    }

}
相关问题