2013-06-16 2 views
0

У меня проблема со сравнением дат. Я вытаскиваю одну дату из базы данных через API. Эти даты хранятся в массиве, потому что один столбец содержит несколько дат, и мне нужно их перебирать, чтобы найти следующую предстоящую дату. Даты в формате: «дд/мм/гггг»Моя переменная не заполняется, остается пустой

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

Если я помещаю var_export в $ DATETIME после $dateTime = DateTime::createFromFormat('dmy', $d); она возвращает «ложь». Поэтому я предполагаю, что $ dateTime пуст, хотя мои массивы $ date заполнены правильно.

var_export от $ даты возвращения:

массив (0 => '15/06/13' , 1 => '16/06/13')

и А var export of $ теперь возвращает дату: '16/06/13 '

Так что я немного застрял, почему моя переменная $ DateTime остается пустой?

EDIT: Очевидно, что возврат «false» означает, что это ошибка, поэтому что-то пошло не так, когда форматирование моих дат из массива?

ответ

0

Если массив $dates содержит такие элементы, как 15/06/13, используйте для использования неправильный формат даты. Например .:

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

не

$dateTime = DateTime::createFromFormat('dmy', $d); 
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).

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

} 
Смежные вопросы