0

我在比较日期时遇到问题。我通过 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);如果我在返回“false”之后放置 $dateTime 的 var_export 。所以我猜 $dateTime 是空的,尽管我的数组 $dates 填充正确。

$dates 的 var_export 返回:

数组(0 => '15/06/13', 1 => '16/06/13', )

并且 $now 的 var 导出返回今天的日期:'16/06/13'

所以我有点困惑为什么我的变量 $DateTime 仍然为空?

编辑:显然,'false' 的返回意味着它是一个错误,所以从数组中格式化我的日期时出了什么问题?

4

4 回答 4

0
$dateTime = DateTime::createFromFormat('d/m/y', $d);

不是

$dateTime = DateTime::createFromFormat('dmy', $d);
于 2013-06-16T17:17:51.603 回答
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).

于 2013-06-16T17:18:02.710 回答
0

如果$dates数组包含这样的元素,请15/06/13使用错误的日期格式。例如:

$dateTime = DateTime::createFromFormat('d/m/y', $d);
于 2013-06-16T17:18:11.910 回答
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;
    }

}
于 2013-06-16T17:28:52.710 回答