2014-01-19 2 views
0

У меня есть база данных MySQL со списком дат. Я хочу вывести все эти даты, если они появятся после сегодняшнего дня, на страницу. Даты хранятся в базе данных в формате DATE, как Y-m-d.Почему это сравнение версий PHP не так, как я ожидаю?

У меня есть следующий код (за исключением запросов и т.д.):

$dateToday = date('Y-m-d'); 

do{ 
    $dateCompare = new DateTime($row['date']); 
    if ($dateCompare > $dateToday){ 
     echo '<p>'.$dateCompare -> format('Y-m-d').'</p>'; 
    } else { 
     echo '<p>FALSE</p>'; 
    } 
}while ($row = $stmt->fetch(PDO::FETCH_ASSOC)); 

Но это просто выводит все даты, включая один я задал в прошлом для целей тестирования. Что я делаю не так?

+0

Самая очевидная вещь, которую вы делаете неправильно фильтрует набора данных из СУБД на уровне приложений. Это должно быть сделано на уровне СУБД. Следующее, что вы делаете неправильно, - это предположение о формате и типе данных - покажите нам, какие значения сравниваются. – symcbean

+0

Я понятия не имею, что вы подразумеваете под двумя двумя предложениями ... – ElendilTheTall

ответ

3

$dateToday - это строка. $dateCompare - объект DateTime.

+0

Так что я должен использовать 'strtotime()' для преобразования $ dateToday? – ElendilTheTall

+0

Сравнение яблок и апельсинов никогда не бывает хорошей идеей, поэтому убедитесь, что оба они - яблоки или апельсины. Поэтому убедитесь, что оба типа типа DateTime или временная метка unix или сопоставимая строка (в формате ISO8601). В большинстве случаев я бы использовал временную метку unix. –

+0

Спасибо - просто присвоен '$ dateToday' как' новый DateTime ('now'); 'и это прекрасно. – ElendilTheTall

0

Попробуйте преобразовать дату из myssql в объект datetime и вывод.

$changetime = new DateTime($time, new DateTimeZone('UTC')); 

    ECHO $changetime->format('m/d/y h:i a'); 

// list of timezones http://us1.php.net/manual/en/timezones.php 

Я использую это для вывода всех моих данных даты и времени MYSQL - позволяю мне конвертировать в любом временной зоны. Обратите внимание: это будет означать, что ваше datetime находится в UTC - вы должны преобразовать свой часовой пояс.

0
$stmt->setFetchMode(PDO::FETCH_ASSOC); 
foreach ($stmt as $row) { 
    $time = strtotime($row['date']); 
    if ($_SERVER['REQUEST_TIME'] - $time) { 
     echo '<p>'. date('Y-m-d', $time) . '</p>'; 
    } else { 
     echo '<p>FALSE</p>'; 
    } 
} 
Смежные вопросы