Использование функции dateTime в цикле foreach для проверки установленной даты больше текущей даты - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь использовать функцию dateTime для поля даты / времени, которое у меня есть в моей базе данных, чтобы проверить, насколько оно больше или меньше, чем другое.

Проблема, с которой я сталкиваюсь, заключается в том, что если я установлю условие на if ($date >= $end_date), тогда я получу только $noEvents для вывода, даже если есть поля end_date, которые на самом деле больше, чем $date ( текущая дата / время). Затем то же самое происходит, если я изменяю условие на if ($date <= $end_date), за исключением наоборот.

Кажется, что это, если оператор читает только один раз и не просматривает каждую запись.

Вот что находится в моей базе данных. Первые две записи имеют даты больше, чем сегодня. Третья запись имеет день, меньший или предыдущий сегодняшнего дня.

Если условие: if ($date >= $end_date)

Я получаю только $noEvents.

Если условие: if ($date <= $end_date)

Я получаю все три записи базы данных, хотя запись под названием «Тест» не должна отображаться.

Кто-нибудь знает, почему это не работает правильно?

enter image description here

if ($date <= $end_date) {
                $noEvents = 'No events are scheduled yet.';
            } else {

events  CREATE TABLE `events` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `event_name` text NOT NULL,
  `display_date` varchar(100) NOT NULL,
  `description` text NOT NULL,
  `event_img` text NOT NULL,
  `end_date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 


try {   
    $con = new PDO('mysql:host='.$servername.';dbname=name', $username, $password);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql_events = "
        SELECT *
        FROM events
        ORDER BY end_date ASC
        LIMIT 3
    ";
    if ($event_stmt = $con->prepare($sql_events)) {
        $event_stmt->execute();
        $event_rows = $event_stmt->fetchAll(PDO::FETCH_ASSOC);
        foreach ($event_rows as $event_row) {
            $event_name = $event_row['event_name'];
            $display_date = $event_row['display_date'];
            $event_description = $event_row['description'];
            $end_date = $event_row['end_date'];
            $date = new DateTime("now");
            if ($date <= $end_date) {
                $noEvents = 'No events are scheduled yet.';
            } else {
                echo '<div class="eventBlock">';
                echo '<span class="hGc">'. $display_date .'</span>';
                echo '<a href="#" class="hLink">'. $event_name .'</a>';
                echo '<p class="dG margBot40">'. $event_description .'</p>';
                echo '</div>';

            }
        }
        if (isset($noEvents)) {
            echo $noEvents;
        }
    }
}
catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

Обновление - Нет событий Код

if ($event_stmt = $con->prepare($sql_events)) {
        $event_stmt->execute();
        $event_rows = $event_stmt->fetchAll(PDO::FETCH_ASSOC);
        $noEvents = NULL;
        foreach ($event_rows as $event_row) {
            $event_name = $event_row['event_name'];
            $display_date = $event_row['display_date'];
            $event_description = $event_row['description'];
            //$end_date = $event_row['end_date'];
            $end_date = new DateTime($event_row['end_date']);
            $date = new DateTime('now');
            //$active_events = count($event_name);
            //var_dump($active_events);
            //if ($active_events === 0) {
            if ($date <= $end_date) {
                $noEvents = 'No events are scheduled yet.';
            } else {
                echo '<div class="eventBlock">';
                echo '<span class="hGc">'. $display_date .'</span>';
                echo '<a href="#" class="hLink">'. $event_name .'</a>';
                echo '<p class="dG margBot40">'. $event_description .'</p>';
                echo '</div>';
            }
        }
        if ($noEvents) {
            echo $noEvents;
        }

1 Ответ

0 голосов
/ 26 апреля 2018

Так что это соответствующий код здесь

$end_date = $event_row['end_date'];
$date = new DateTime("now");
if ($date <= $end_date) { }

Проблема в том, что вы сравниваете строку с DateTime объектом. Что вы должны сделать, это также сделать $end_date a DateTime, и ваши тесты должны работать как написано

$end_date = new DateTime($event_row['end_date']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...