секция "сегодня/завтра"

Мне бы хотелось в секции выводить рандомно событие либо сегодняшнее , либо завтрашнее. в event_date(text) хранится дата события в формате дд.мм.гггг. Сегодня 29.01.2024 имеется две записи с датами 30.01.1949 и 29.01.1848. Если я правильно понимаю , мне нужно выловить день и месяц события и вывести его рандомно, но как это сделать? Подскажите пожалуйста

    <section
        style="position: relative; background-image: url(calendar.jpg); height: 100vh; display: flex; justify-content: center; align-items: center; text-align: center; color: #333; font-family: 'Arial', sans-serif;">
        <?php
    // Определяем сегодняшнюю дату
    $today = date('Y-m-d');

    // Определяем завтрашнюю дату
    $tomorrow = date('Y-m-d', strtotime('+1 day'));

    // Запрос к базе данных для выбора случайного события на сегодня или завтра
    $sql = "SELECT * FROM events 
            WHERE (MONTH(event_date) = MONTH('$today') AND DAY(event_date) = DAY('$today'))
               OR (MONTH(event_date) = MONTH('$tomorrow') AND DAY(event_date) = DAY('$tomorrow'))
            ORDER BY RAND() LIMIT 1";
    $result = $conn->query($sql);

    // Проверка на наличие событий
    if ($result !== false && $result->num_rows > 0) {
        // Вывод случайного события
        $row = $result->fetch_assoc();
        ?>
        <div class="event"
            style="position: relative; padding: 20px; background-color: rgba(255, 255, 255, 0.8); border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);">
            <h1 style="font-size: 2em; color: black; text-align: center;">
                <?php
                if ($row['event_date'] == $today) {
                    echo 'Сегодня';
                } elseif ($row['event_date'] == $tomorrow) {
                    echo 'Завтра';
                }
                ?>
            </h1>
            <img src="<?php echo $row['file_path']; ?>" alt="<?php echo $row['event_name']; ?>"
                style="max-width: 100%; border-radius: 8px;">
            <h1 style="font-size: 1.5em; margin-bottom: 10px;">
                <?php echo $row['event_name']; ?>
            </h1>
            <p>
                <?php echo $row['event_description']; ?>
            </p>
        </div>
        <?php
    } else {
        // Добавим отладочный вывод для более детальной диагностики
        echo '<p style="margin-top: 20px; font-size: 1.2em; color: #fff;">На выбранную дату нет событий.</p>';
        if ($result === false) {
            echo '<p style="font-size: 1.2em; color: #fff;">Ошибка выполнения запроса: ' . $conn->error . '</p>';
        }
        // Добавим отладочный вывод самого запроса
        echo '<p style="font-size: 1.2em; color: #fff;">Debug Info: SQL Query: ' . $sql . '</p>';
    }
    ?>
    </section>

При данном коде - На выбранную дату нет событий.

Debug Info: SQL Query: SELECT * FROM events WHERE (MONTH(event_date) = MONTH('2024-01-29') AND DAY(event_date) = DAY('2024-01-29')) OR (MONTH(event_date) = MONTH('2024-01-30') AND DAY(event_date) = DAY('2024-01-30')) ORDER BY RAND() LIMIT 1


Ответы (1 шт):

Автор решения: Егор Белобородов

у меня получился такой вариант.

    <section
        style="position: relative; background-image: url(calendar.jpg); height: 100vh; display: flex; justify-content: center; align-items: center; text-align: center; color: #333; font-family: 'Arial', sans-serif;">

        <?php
        // Определяем, что считать сегодняшним и завтрашним событием
        $dayToday = date('d');
        $monthToday = date('m');

        $dayTomorrow = date('d', strtotime('+1 day'));
        $monthTomorrow = date('m', strtotime('+1 day'));

        // Выбираем случайную дату между сегодняшним и завтрашним днем
        $random_date = mt_rand(0, 1) ? date('Y-m-d') : date('Y-m-d', strtotime('+1 day'));

        $dayRandom = date('d', strtotime($random_date));
        $monthRandom = date('m', strtotime($random_date));

        if ($dayRandom == $dayToday && $monthRandom == $monthToday) {
            $dateLabel = 'Сегодня';
        } elseif ($dayRandom == $dayTomorrow && $monthRandom == $monthTomorrow) {
            $dateLabel = 'Завтра';
        } else {
            $dateLabel = $random_date;
        }

        // Запрос к базе данных для выбора случайного события на сегодня или завтра
        $sql = "SELECT * FROM events WHERE DAY(STR_TO_DATE(event_date, '%d.%m.%Y')) = $dayRandom AND MONTH(STR_TO_DATE(event_date, '%d.%m.%Y')) = $monthRandom ORDER BY RAND() LIMIT 1";
        $result = $conn->query($sql);

        // Проверка на наличие событий
        if ($result !== false && $result->num_rows > 0) {
            // Вывод случайного события
            $row = $result->fetch_assoc();
            ?>
        <div class="event"
            style="position: relative; padding: 20px; background-color: rgba(255, 255, 255, 0.8); border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);">
            <h1 style="font-size: 2em; color: black; text-align: center;">
                <?php echo $dateLabel; ?>
            </h1>
            <img src="<?php echo $row['file_path']; ?>" alt="<?php echo $row['event_name']; ?>"
                style="max-width: 100%; border-radius: 8px;">
            <h1 style="font-size: 1.5em; margin-bottom: 10px;">
                <?php echo $row['event_name']; ?>
            </h1>
            <p>
                <?php echo $row['event_description']; ?>
            </p>
        </div>
        <?php
        } else {
            // Выводим сообщение, что на сегодня или на завтра нет события
            echo '<h1 >На ' . $dateLabel . ' нет события.</h1>';
        }
        ?>

    </section>
→ Ссылка