За последние 24 часа нас посетили 22016 программистов и 1100 роботов. Сейчас ищут 709 программистов ...

PHP MySQL работа со временем

Тема в разделе "PHP и базы данных", создана пользователем sqwerel, 12 авг 2016.

Метки:
  1. sqwerel

    sqwerel Новичок

    С нами с:
    9 окт 2015
    Сообщения:
    24
    Симпатии:
    0
    Подскажите, пожалуйста, куда копать. Есть скрипт на php - выбирает время из базы
    Код (Text):
    1. $query="select sec_to_time(sum(time_to_sec(time))) ";
    Далее идёт вывод этого добра через список {$row['sec_to_time(sum(time_to_sec(time)))']}, и тут всё замечательно, но сумму этого списка выдаёт как округлённую сумму по часам. Например, 10:22:00+00:10:00=10, просто 10. Как на этапе сложения преобразовать в секунды, а потом обратно в нормальный формат? Т.е. получается, что в переменную мы суммируем секунды, а вывод её переделываем в ч.м.с
     
  2. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Ничего там не округляется, это ты позже где-то косячишь, превращаещь стррку в целое.
    Выражению SQL можно дать имя, чтобы не писать такой ужас в качестве индекса массива.
     
  4. sqwerel

    sqwerel Новичок

    С нами с:
    9 окт 2015
    Сообщения:
    24
    Симпатии:
    0
    Косяк поправлен - сделал запрос на секунды, потом их суммировал, а потом уж переводил в норм. время. но у меня вопрос, почему в результате секунды у меня уходят в отрицание? Дело в том, что время уж очень большое. Я заметил, что sec_to_time значение больше 838:59:59 не выводит. Как сумма получается 716800:41:-16. Пробовал поменять на дни:часы:минуты:сек. Тоже секунды отрицательные.
    В базе есть ещё один столбец со временем, там оно значительно меньше, так вот там таких проблем нет - все считается верно. Я так понимаю, с таким количеством часов мой метод не прокатывает. Что можете посоветовать?
    Перевожу так:
    $sum_end_time=sprintf("%d:%02d:%02d", floor($sum_time / 3600), (($sum_time / 60) % 60), ($sum_time % 60));