Расчет даты и времени MySQL

У меня есть столбцы date и time в моей таблице mysql, которые называются start_date и start_time соответственно. Я хочу, чтобы мои пользователи могли устанавливать для себя напоминания, которые будут отправляться за X часов до start_time, мин. 1 час и максимум 24 часа.

Я буду запускать скрипт CRON для отправки этих напоминаний. Прямо сейчас делаю:

SELECT * FROM auctions WHERE start_date=CURDATE() AND status='0'

Чтобы получить все аукционы, которые начнутся сегодня и еще не начались. Мой вопрос в том, как я могу выяснить, сейчас ли время X часов до start_time, чтобы я мог отправить им напоминание, если это так.

Есть какие-нибудь предложения?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
2 898
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Что-то вроде этого:

SELECT col1, col2, col3 
FROM records 
WHERE (records.startDate BETWEEN NOW() AND ADDDATE(NOW(), INTERVAL 9 HOUR)) 
AND (records.status = '0');

Есть ли причина, по которой вы не можете просто использовать простое поле временной метки вместо одного для даты и одного для времени. Таким образом, вы можете найти все, что начнется в ближайшие 5 часов (скажем), выполнив

select * from auctions where start_ts between now() and now() + interval '5 hours';

Примечание: синтаксис интервалов немного различается между базами данных, в том числе для postgresql, поэтому вам, возможно, придется немного изменить его для mysql.

Можете ли вы использовать unixtime, чтобы сэкономить время?

Поскольку в PHP есть замечательная функция под названием strtotime.

Внутри можно сказать. strtotime ("+ 20 часов") и получите unixtime на 20 часов с этого момента.

Тогда просто вопрос, какое поле больше другого, если да, отправьте уведомление.

Почему вы предполагаете, что он работает с PHP? Для начала он будет использовать cronjob, что указывает на то, что это может быть не PHP. во-вторых, зачем использовать strtotime для вычисления 20 часов в секундах? Это основная математика ...

jishi 15.01.2009 00:03

почему cronjob указывает, что это не PHP?

Glen Solsberry 15.01.2009 00:04

Я действительно сделал это до того, как были отправлены все ответы и все заработало. Поскольку у меня крайний срок, я не могу вернуться и изменить его :)

$sql = "SELECT HOUR(ADDTIME(CURTIME(),'$hour')) as remindHour, HOUR(CURTIME()) as curHour";
$result=$this->db->query($sql);

extract($result->getAllSingle());

if ($remindHour <=$curHour) {
    // Send reminders
}

Другие вопросы по теме