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

Тема в разделе "PHP", создана пользователем zditovetsky, 12 июн 2015.

Модераторы: latteo
  1. zditovetsky

    zditovetsky Постоялец

    Регистр.:
    20 май 2014
    Сообщения:
    81
    Симпатии:
    10
    Добрый день!
    Подскажите пожалуйста следующее:

    Мне нужно подсчитать суммарно время выполненных работ. Каждое время выполненной работы я получаю в формате 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)
    Почему так получается и как это победить?
    Спасибо!
     
  2. 1n3gant

    1n3gant Создатель

    Регистр.:
    22 май 2015
    Сообщения:
    44
    Симпатии:
    4
    Попробуй переведи/храни данные в числовой формат, допустим в секунды С ним намного проще будет работать в будущем. В данной ситуации вероятно ты конкатинируешь строки, следовательно '00:00:00' + '03:00:00' вернет тебе int(1). Так же ты всегда переопределяешь переменную $totaltime.
     
    zditovetsky нравится это.
  3. denverkurt

    denverkurt Denve®

    Регистр.:
    23 дек 2013
    Сообщения:
    685
    Симпатии:
    376
    если время без даты, то в 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;
    
     
    zditovetsky нравится это.
  4. zditovetsky

    zditovetsky Постоялец

    Регистр.:
    20 май 2014
    Сообщения:
    81
    Симпатии:
    10
    Спасибо за помощь! Я немного подправил код под себя:
    Код:
                        $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 КБ
      Просмотров:
      7
  5. zditovetsky

    zditovetsky Постоялец

    Регистр.:
    20 май 2014
    Сообщения:
    81
    Симпатии:
    10
    Нашел ошибку: в 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;
    
     
    Samagonische нравится это.