Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: запарка с обработкой времени

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Evgeniux
Отправлено: 06 Ноября, 2009 - 22:01:55
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




Вечер добрый! есть начальное время, например 16:00, и есть теперешнее время, высчитываю разницу между ними и вывожу результат типа: "прошло n часов, n минут и n секунд" (что-то типа обратного таймера). работает все корректно если теперешнее время больше начального, иначе время становится с минусом,подскажите как сделать чтобы часы прибавлялись, а не отображались с минусом, даже если прошло больше суток?
 
 Top
Ch_chov
Отправлено: 06 Ноября, 2009 - 22:05:54
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




использовать timestamp
 
 Top
Evgeniux
Отправлено: 07 Ноября, 2009 - 17:21:44
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




попробовал:
$query= mysql_query (" SELECT UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(`start_t`) FROM `zak`");
$d= mysql_result($query,0);
echo date ('H:i', $d);
start_t - было 15:00:00 (поле в mySQL DATETIME)
now(например) 17:17
разность составила 04:17, что не совсем верно, но суда по всему два часа - это из-за часового пояса (+0200).
Так все равно если начальное время со вчерашней датой, то разность будет такая же.
Судя по всему я неправильно преобразую время, тогда как преобразовать UNIX_TIMESTAMP в нормально время?
 
 Top
Ch_chov
Отправлено: 07 Ноября, 2009 - 17:59:23
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Какой формат у `start_t` ?
(Добавление)
CODE (sql):
скопировать код в буфер обмена
  1. SELECT TIMEDIFF(NOW(), `start_t`) FROM `zak`
 
 Top
Evgeniux
Отправлено: 07 Ноября, 2009 - 19:31:01
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




у start_t формат DATETIME
на такой запрос :ELECT TIMEDIFF(NOW(), `start_t`) FROM `zak`
возвращает 02:00

(Отредактировано автором: 07 Ноября, 2009 - 19:40:10)

 
 Top
Champion Супермодератор
Отправлено: 07 Ноября, 2009 - 19:35:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Вот запиши в свой start_t не только время, но и дату тоже. Что может быть проще?
 
 Top
Evgeniux
Отправлено: 07 Ноября, 2009 - 19:49:23
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




дык, в `start_t` дата стоит типа "2009-11-07 15:00:00" (например) Однако
 
 Top
Champion Супермодератор
Отправлено: 07 Ноября, 2009 - 19:54:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Ну а как же тогда у тебя отрицательные вещи получаются, когда ты вычитаешь? Ты просто результат не правильно обрабатываешь.

Если тебе нужно получить разницу во времени больше 24 часов, то не жди, что ты получишь из запроса результат типа 45:32:45. Результат будет как обычный time выглядеть. А вот если ты возьмешь эту разницу как timestamp в секундах и просто переведешь в то, что тебе надо делением на 60, то получишь нормальный результат.

И не timediff, а timestampdiff, либо просто вчитание.
 
 Top
Ch_chov
Отправлено: 07 Ноября, 2009 - 19:54:42
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




А что возвращает SELECT NOW() ?
 
 Top
Evgeniux
Отправлено: 07 Ноября, 2009 - 20:01:19
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




SELECT NOW() возвращает 2009-11-07 19:58:16 т.е. все в порядке!
Вот, я же выше писал, что наверное, неправильно преобразую дату.
 
 Top
Ch_chov
Отправлено: 07 Ноября, 2009 - 20:08:02
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




SELECT TIMEDIFF(NOW(), `start_t`) FROM `zak`
если так выбирать то ничего преобразовывать не нужно.
Цитата:
02:00
Разница 2 минуты? Какая должна быть на самом деле?
 
 Top
Champion Супермодератор
Отправлено: 07 Ноября, 2009 - 20:08:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Хм, я не прав был:
Цитата:
TIMEDIFF() returns expr1 – expr2 expressed as a time value. expr1 and expr2 are time or date-and-time expressions, but both must be of the same type.

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',
-> '2000:01:01 00:00:00.000001');
-> '-00:00:00.000001'
mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001',
-> '2008-12-30 01:01:01.000002');
-> '46:58:57.999999'
 
 Top
Evgeniux
Отправлено: 07 Ноября, 2009 - 20:11:53
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




Ch_chov пишет:
SELECT TIMEDIFF(NOW(), `start_t`) FROM `zak`
если так выбирать то ничего преобразовывать не нужно.
Цитата:
02:00
Разница 2 минуты? Какая должна быть на самом деле?

разница получается два часа, как я понимаю, а не две минуты
 
 Top
Ch_chov
Отправлено: 07 Ноября, 2009 - 20:19:15
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Тогда было бы 02:00:00
 
 Top
Evgeniux
Отправлено: 07 Ноября, 2009 - 20:35:24
Post Id


Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




все оказалось действительно просто!
Запрос SELECT TIMEDIFF(NOW(), `start_t`) FROM `zak`
$d= mysql_result($query,0);
echo $d;
выдает, что нужно и как нужно!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB