[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как вывести время >24часов
rooor
Здравствуйте) Не удалось по быстрому решить))

В общем есть в БД хранится время, тип ячейки - Time(00:00:00)...
Записей много, и мне их надо сложить. Делаю так:
SELECT SUM(TIME_TO_SEC (`t_time`))

И вот как теперь мне вывести на страничку полученные секунды в формате time?
date("H:i:s") понимает только до 24 часов...



Спустя 6 минут, 5 секунд (10.10.2011 - 15:35) Brajt написал(а):
если правильно понял, то можно вывести в цикле весь столбец time, перевести в цикле все часы в секунды, прибавить переведенные минуты в секунды и прибавить секунды. - получится время в секундах для каждой ячейки. и потом сложить)

Спустя 4 минуты, 16 секунд (10.10.2011 - 15:39) rooor написал(а):
Brajt
Запрос, который я написал, складывает время в столбце, на выходе получаются секунды.
Вот эти секунды мне и надо вывести на страничку в виде чч:мм:сс, но секунд может быть, например, 150000

Спустя 5 минут, 13 секунд (10.10.2011 - 15:45) Winston написал(а):
А так ?
$res = mysql_query("SELECT SUM(TIME_TO_SEC (`t_time`)) AS `t_sec` FROM `tbl`");
$res = mysql_fetch_assoc($res);
echo date('H:i:s', $res['t_sec']);


Спустя 2 минуты, 15 секунд (10.10.2011 - 15:47) Brajt написал(а):
150000 / 86400 = 1 сутки
150000 - 86400 = 63600 / 3600 = 17 часов
(63600 - 3600*17) / 60 = 40 минут

Спустя 24 секунды (10.10.2011 - 15:47) linf написал(а):
Логичнее в базу записывать значение в Уникс Времени date("U"), в простую INT ячейку. и не возится с типом Time. Плюсы такого решения:

+ Такая запись может быть и универсальным идентификатором чего либо.
+ Удобнее такой датой оперировать для вычисления интервалов и сортировки "новое-старое"
+ Не создавать мега-геморойный скрпт получения (ввода) текущего времени в TIME формате базы.

Если же потом необходимо вывести дату в человеческом виде, делается это просто:
echo date('d.m.Y', $date_unix);

Спустя 1 минута, 17 секунд (10.10.2011 - 15:49) killer8080 написал(а):
SELECT SUM(TIME_TO_SEC (`t_time`)) AS `time`

$seconds = $row['time'] % 60;
$minutes = floor($row['time'] / 60) % 60;
$hours = floor($row['time'] / 3600);

Спустя 1 минута, 39 секунд (10.10.2011 - 15:50) rooor написал(а):
Winston
Именно так и делаю)

Но echo
date('H:i:s', /*тут переменная, в которой 80000 секунд*/);


выводит 01:13:20

Спустя 7 минут, 46 секунд (10.10.2011 - 15:58) killer8080 написал(а):
rooor
а мой вариант чем не устроил?

Спустя 1 минута, 13 секунд (10.10.2011 - 15:59) rooor написал(а):
linf
Надо будет подумать) Пока не поздно базу переделать

killer8080
Тоже вариант, но не хотелось бы городить переменные... и если будет 1 час, то напишет без ведущего нуля

Спустя 9 минут, 16 секунд (10.10.2011 - 16:09) killer8080 написал(а):
Цитата (rooor @ 10.10.2011 - 15:59)
и если будет 1 час, то напишет без ведущего нуля

да не вопрос
$seconds = sprintf('%02u', $row['time'] % 60);
$minutes = sprintf('%02u', floor($row['time'] / 60) % 60);
$hours = sprintf('%02u', floor($row['time'] / 3600));

Спустя 3 минуты, 5 секунд (10.10.2011 - 16:12) linf написал(а):
Цитата (rooor @ 10.10.2011 - 16:59)
linf
Надо будет подумать) Пока не поздно базу переделать

Подумай. Я например по дате вывожу картинку к определенному материалу.
<IMG src='<? echo $date_unix; ?>.jpg'>

Это избавляет от необходимости содержать в MySQL таблице дополнительное поле для названия изображения.

Очень удобно, так как материалы, чаще чем раз в секунду не добавляются, а значит имя файла (изображения) уникально =)


Спустя 5 минут, 22 секунды (10.10.2011 - 16:17) killer8080 написал(а):
Цитата (linf @ 10.10.2011 - 16:12)
так как материалы, чаще чем раз в секунду не добавляются, а значит имя файла (изображения) уникально =)

Я бы не стал зарекаться, возможны и накладки smile.gif

Спустя 21 минута, 5 секунд (10.10.2011 - 16:38) linf написал(а):
Цитата (killer8080 @ 10.10.2011 - 17:17)
Цитата (linf @ 10.10.2011 - 16:12)
так как материалы, чаще чем раз в секунду не добавляются, а значит имя файла (изображения) уникально =)

Я бы не стал зарекаться, возможны и накладки smile.gif

Лично я говорю про ручное добавление материалов в базу данных, например через админку сайта. Больше двух в секунду ну не как не добавить, если вы конечно не СУПЕРМЭН wink.gif

Спустя 8 минут, 12 секунд (10.10.2011 - 16:46) killer8080 написал(а):
Цитата (linf @ 10.10.2011 - 16:38)
Лично я говорю про ручное добавление материалов в базу данных, например через админку сайта. Больше двух в секунду ну не как не добавить, если вы конечно не СУПЕРМЭН

А если параллельно работают несколько модераторов? Пусть вероятность и крайне мала, но она не исключена. Тогда надёжней было бы использовать микротайм или дописывать рандомное число. Ну ладно не буду спорить smile.gif

Спустя 2 часа, 28 минут, 18 секунд (10.10.2011 - 19:15) rooor написал(а):
Ну картинки мне загружать не надо...
В принципе мне такой вариант идеально подходит)

Спустя 1 минута, 56 секунд (10.10.2011 - 19:17) rooor написал(а):
Но опять-таки на выходе мы получим секунды)

Кроме предложения killer8080 больше никак не вывести?
Ладно, буду делать так.

Спустя 2 минуты, 54 секунды (10.10.2011 - 19:19) Winston написал(а):
Цитата (rooor @ 10.10.2011 - 15:59)
но не хотелось бы городить переменные

Запихнуть код в функцию.

Спустя 13 часов, 14 минут, 26 секунд (11.10.2011 - 08:34) killer8080 написал(а):
rooor
если код будет многократно использоваться, то просто запихнуть в функцию
function make_time_string($time){
return sprintf('%02u', floor($time / 3600)) . ':' .
sprintf('%02u', floor($time / 60) % 60) . ':' .
sprintf('%02u', $time % 60);
}

Спустя 1 минута, 13 секунд (11.10.2011 - 08:35) rooor написал(а):
killer8080
Ага, работает) Спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.