Вопрос связанный со временем

zditovetsky

Постоялец
Регистрация
20 Май 2014
Сообщения
86
Реакции
13
Добрый день!
Подскажите пожалуйста следующее:

Мне нужно подсчитать суммарно время выполненных работ. Каждое время выполненной работы я получаю в формате 00:02:10 (чч/мм/сс). Суммарное время должно быть в таком же формате.

Вот как я делал:
Код:
$totaltime = '00:00:00';
while ($row2 = mysql_fetch_array($res2))
 {
$totaltime = date('H:i:s', strtotime($totaltime + $row2['time']));
}
echo $totaltime;  // результат - 03:00:03 а должно быть 00:51:00
ps: в $row2['time'] все верно, вывожу в цикле и вижу тот же формат (00:02:00)
Почему так получается и как это победить?
Спасибо!
 
Попробуй переведи/храни данные в числовой формат, допустим в секунды С ним намного проще будет работать в будущем. В данной ситуации вероятно ты конкатинируешь строки, следовательно '00:00:00' + '03:00:00' вернет тебе int(1). Так же ты всегда переопределяешь переменную $totaltime.
 
если время без даты, то в unix формат это не перевести, остается парсить ваш формат на часы, минуты секунды, а потом плюсовать и раскладывать обратно на время
как то так примерно:
Код:
$totaltime = 0;
while ($row2 = mysql_fetch_array($res2)) {
    $temp = explode(':', $row2['time']);
    $totaltime += $temp[0] * 3600;//секунд в часе
    $totaltime += $temp[1] * 60;//секунд в минуте
    $totaltime += $temp[1];//секунды
}

$hours = floor($totaltime / 3600);
if ($hours < 10) $hours = '0'.$hours;
$ostatok = $totaltime % 3600;//получаем остаток после деления на часы
$minut = $ostatok / 60;
if ($minut < 10) $minut = '0'.$minut;
$secund= $ostatok % 60;//получаем остаток после деления на минуты
if ($secund < 10) $secund = '0'.$secund;

$totaltime = $hours.':'.$minut.':'.$secund;
 
Спасибо за помощь! Я немного подправил код под себя:
Код:
                    $temp = explode(':', $row2['time']);
                    $totaltime += $temp[0] * 3600; //секунд в часе
                    $totaltime += $temp[1] * 60; //секунд в минуте
                    $totaltime += $temp[1]; //секунды
                  
                    $hours = floor($totaltime / 3600);
                    if ($hours < 10) $hours = '0'.$hours;
                    $ostatok = $totaltime % 3600;//получаем остаток после деления на часы
                    $minut = round($ostatok / 60);
                    if ($minut < 10) $minut = '0'.$minut;
                    $secund = $ostatok % 60;//получаем остаток после деления на минуты
                    if ($secund < 10) $secund = '0'.$secund;

                    $totaltimestr = $hours.':'.$minut.':'.$secund;
Где-то есть ошибка, значение секунд неверное... Во вложении скриншот.

Помогите, плиз, очень срочно нужно!!!
 

Вложения

  • table.jpg
    table.jpg
    51 KB · Просмотры: 7
Нашел ошибку: в 4 строке нужно было написать $temp[2];
т.е. весь код вот такой должен быть:
Код:
$temp = explode(':', $row2['time']);
$totaltime += $temp[0] * 3600; //секунд в часе
$totaltime += $temp[1] * 60; //секунд в минуте
$totaltime += $temp[2]; //секунды

$hours = floor($totaltime / 3600);
if ($hours < 10) $hours = '0'.$hours;
$ostatok = $totaltime % 3600;//получаем остаток после деления на часы
$minut = round($ostatok / 60);
if ($minut < 10) $minut = '0'.$minut;
$secund = $ostatok % 60;//получаем остаток после деления на минуты
if ($secund < 10) $secund = '0'.$secund;

$totaltimestr = $hours.':'.$minut.':'.$secund;
 
Назад
Сверху