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 обрабатывает временной фармат MySQL?

 PHP.SU

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


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

> Без описания
Bounefarte
Отправлено: 20 Марта, 2008 - 18:36:34
Post Id


Новичок


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


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




столкнулся с траблой..
в БД создал 2 ячейки с временным форматом (TIME)..
скрипт PHP состоит в том, что он считывает с БД 2 ячейки, потом прибавляет, и выводит результат..

пример: ячейки "16:00:00" и "2:30:00".
результат вывода "18"..

вопрос: куда деваються минуты и секунды?.. как PHP обрабатывает данные в таком формате?..

З.Ы. если надо забрать из БД одну ячейку и потом просто ее вывести, то все нормально выводиться..

Подскажите плз..
 
 Top
EuGen Администратор
Отправлено: 20 Марта, 2008 - 19:23:50
Post Id


Профессионал


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


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




Можно по-разному решить эту проблему, например, если у Вас есть 2 поля field0 и field1 в таблице your_table, хранящих время, то требуемое можно получить так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $result=mysql_query("SELECT TIMEDIFF(field1, field2) AS tdiff FROM your_table");
  4. $row=mysql_fetch_array($result);
  5. echo($row['tdiff']);
  6. ?>
  7.  

(Отредактировано автором: 20 Марта, 2008 - 19:31:43)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Bounefarte
Отправлено: 20 Марта, 2008 - 19:49:01
Post Id


Новичок


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


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




а не могли бы вы чуть чуть обьяснить?.. поиск не находит такого..
насколько я понял мы просто даем MySQL самой разобраться с временем и нам выдать уже результат произведенной операции?

не могли бы вы дать линку на инфу, где бы была упомянута функция TIMEDIFF?

(Отредактировано автором: 20 Марта, 2008 - 19:51:07)

 
 Top
EuGen Администратор
Отправлено: 20 Марта, 2008 - 20:40:17
Post Id


Профессионал


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


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




Да, Вы правильно поняли. Дело в том, что в MySQL есть множество различных функций для работы с датой и временем.
PHP хранит дату/время как обычную строку, потому когда Вы написали "16:00:00"+"2:30:00" это привелось к целочисленным типам, получилось 16+2=18.
Кстати, TIMEDIFF вычисляет разницу, так что я дал не точный ответ, приношу извинения.
Прочитать можно в мануале по MySQL, например (он, как правило, входит в дистрибутив).
Для суммы можно сделать так:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. SELECT ADDTIME(field0, field1);
  3.  

Про эту функцию можно прочитать там же.
Про работу с датой и временем в php тут:
http://php.su/functions/?page=cat_calendar


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok
Отправлено: 20 Марта, 2008 - 20:47:07
Post Id



Здесь могла бы быть ваша реклама


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


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






-----
Truly yours, Sasha.
 
My status
 Top
Bounefarte
Отправлено: 26 Марта, 2008 - 14:42:00
Post Id


Новичок


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


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




Всем спасибо.
Проблема решена.

Я решил ее через возможности PHP и алгебру
PHP:
скопировать код в буфер обмена
  1.  
  2. $time=explode(":",$array[2]);
  3. $long=explode(":",$array[3]);
  4. $time1_seconds = (($time[0] * 3600) + ($time[1] * 60));
  5. $time2_seconds = (($long[0] * 3600) + ($long[1] * 60));
  6. $total = $time1_seconds + $time2_seconds;
  7. $last["hrs"] = floor(($total / 3600));
  8. $last["mins"] = floor(($total - ($last["hrs"] * 3600)) / 60);
  9.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB