Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > сравнение текущего времени с указанным


Автор: Risyaalex 22.9.2010, 13:16
Есть скипт, который должен запускаться в определенное время каждый день (это время может меняться, оно хранится в базе данных в формате чч:мм:сс)
Для запуска скипта я хочу использовать cron, который будет раз в минуту запускаться и должен сравнивать время текущее с временем указанным в базе.
У меня не получается корректно составить условие, т.е как правильно сравнить время в данном случае?

Код

$result = mysql_query ("SELECT yes,time FROM lot_new");
$arr = mysql_fetch_array ($result);
$arr['time']) = время запуска скипта;
if (время запуска скипта<=настоящего времени){

}
else echo "Еще не время...";


Заранее спасибо)

Автор: DeamonShan 22.9.2010, 13:37
время можно сравнивать напрямую, то есть в том формате, в котором записан.

Код

$time1="12:15:48";
$time2="12:19:48";


тогда условие 
Код

$time1>=$time2


вернет false;

главное с лева и справа были одинаковый формат времени...

Можно попробовать сравнить в секундах, преобразовав в секунды времена.

Автор: Sanchezzz 22.9.2010, 14:50
DeamonShan,  а в int то хранить удобнее будет.

Автор: Risyaalex 22.9.2010, 15:22
Цитата(DeamonShan @ 22.9.2010,  13:37)
время можно сравнивать напрямую, то есть в том формате, в котором записан.

Код

$time1="12:15:48";
$time2="12:19:48";


тогда условие 
Код

$time1>=$time2


вернет false;

главное с лева и справа были одинаковый формат времени...

Можно попробовать сравнить в секундах, преобразовав в секунды времена.

а как текущее время в таком формате вывести? или вытянуть из бд в другом формате? я теоретически понимаю что формат должен быть одинаковым, а вот практически..)

Автор: DeamonShan 22.9.2010, 15:30
Sanchezzz, ну тс сказал что формат чч:мм:сс)))


Risyaalex, 
Текущее время:

Код

$time_now=date("H:i:s", time());


формат "H:i:s" надо тоже побирать, потому что время у вас может быть либо 12 часовым, либо 24 часовы, соответвественно H надо заменить на G, если 24 часовой формат времени.

Автор: evilice 22.9.2010, 15:38
Я думаю Вашу проблему можно решить как-то так:
Код

$query = "SELECT IF(DATE_FORMAT(NOW(), '%H:%i:%s') = t.time, 1, 0) AS res, t.yes FROM lot_new t";
$result = mysql_query ($query);
$res = mysql_fetch_object($result)->res;

if ($res == 1){
    
} else echo "Еще не время...";


Добавлено через 5 минут
К стати!
Есть ещё один вариант, на случай если плохо знаете SQL

Код

$result = mysql_query ("SELECT t.time, t.yes FROM lot_new t");
$time = mysql_fetch_object($result)->time;

if ($time == date("H:i:s", time())){
    //--- какой-то скрипт
} else echo "Еще не время...";

Автор: Risyaalex 22.9.2010, 16:08
спасибо, сейчас буду пробовать)))

Добавлено @ 16:22
Код
$result = mysql_query ("SELECT t.time, t.yes FROM lot_new t");
$time = mysql_fetch_object($result)->time;

if ($time == date("H:i:s", time())){
    //--- какой-то скрипт
} else echo "Еще не время...";


вот этот вариант подошел только $time == date поменяла на $time <= date иначе не хотел работать (все равно у меня скрипт отрабатывает только один раз, до смены данных)

спасибо большое)

Автор: Muerto 22.9.2010, 17:41
Никогда и не за что не сравнивайте 12:13<13:45 и тп, это вам не помидоры считать!
Бед не наберетесь  smile 

Автор: IgorIV 22.9.2010, 19:08
Цитата(Muerto @  22.9.2010,  18:41 Найти цитируемый пост)
это вам не помидоры считать!

Это ты на что намекаешь?

Автор: evilice 22.9.2010, 19:25
Muerto прав!!!
В моём примере идёт сравнивание строк! Если Вам, Risyaalex, нужно сравнить на больше/меньше, то результат, возвращаемый из БД, нужно преобразовать к Date или int.

Автор: IgorIV 22.9.2010, 21:10
Секунды проверять нет смысла. Крон включается раз в минуту. А если система загружена, то скрипт может отработать и в 2, и в 5 секунд.

Автор: evilice 22.9.2010, 21:13
Абсолютно согласен!
Если проверка будет проходить 1 раз в минуту, то из проверки достаточно убрать секунды и тогда не надо будет преобразовывать к другим форматам, а просто сравнивать как строку

Автор: Muerto 22.9.2010, 21:30
У меня лично такие сравнения не работали корректно... поэтому и не советую...
Стоит построить цикл от 00:00 до 24:00 и сравнивать , я уверен что все станет понятно...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)