Somando campo datetime em um foreach
05/02/2015
0
estou finalizando um projeto em php e estou com um problema, eu tenho gravado no banco de dados os campos "datainicial","datafinal', e "datatotal", todos dão campos datetime
na página onde eu estou com problemas eu estou listando todos os registros com um foreach e eu quero somar todos os valores de tempo da "datatotal" segue abaixo o exemplo de como eu estou fazendo:
<?php include 'includes/database.php'; $pdo = Database::connect(); $sql = "SELECT * FROM linha_dir"; foreach($pdo->query($sql)as $row){ echo '<tr>'; echo '<td>'.$row['desct'].'</td>'; echo '<td>'.$row['solic'].'</td>'; echo '<td>'.$row['dtini'].'</td>'; echo '<td>'.$row['dtfnl'].'</td>'; echo '<td>'.$row['ttotal'].'</td>'; echo '<td>'.$row['status'].'</td>'; echo '</tr>'; $date = new DateTime('0000-00-00 00:00:00'); $datat = new DateInterval($row['ttotal']); $date->add($datat); } Database::disconnect(); echo '<tr>'; echo '<th colspan = 4>Total :</th>'; echo '<td>'; echo $date->format('Y-m-d H:i:s') . "\n"; echo '</td>'; echo '<td></td>'; echo '</tr>';
e está aparecendo o seguinte erro:
Fatal error: Uncaught exception 'Exception' with message 'DateInterval::__construct(): Unknown or bad format (0000-00-00 00:31:00)' in C:\xampp\htdocs\sistemas\forms.php:417 Stack trace: #0 C:\xampp\htdocs\sistemas\forms.php(417): DateInterval->__construct('0000-00-00 00:3...') #1 thrown in C:\xampp\htdocs\sistemas\forms.php on line 417
e quando faço deste modo:
$date = new DateTime('0000-00-00 00:00:00'); $datat = new DateTime($row['ttotal']); $date->add($datat);
e aparece o erro:
Warning: DateTime::add() expects parameter 1 to be DateInterval, object given in C:\xampp\htdocs\sistemas\forms.php on line 418
Alguém pode me dar um dica, ou alguém sabe que problema pode estar acontecendo? Valeu !!!
João Vitor
Posts
05/02/2015
Ronaldo Lanhellas
$cont = 0; foreach($pdo->query($sql)as $row){ if ($cont == 0){ $date = new DateTime($row['ttotal']); } echo '<tr>'; echo '<td>'.$row['desct'].'</td>'; echo '<td>'.$row['solic'].'</td>'; echo '<td>'.$row['dtini'].'</td>'; echo '<td>'.$row['dtfnl'].'</td>'; echo '<td>'.$row['ttotal'].'</td>'; echo '<td>'.$row['status'].'</td>'; echo '</tr>'; $datat = new DateInterval($row['ttotal']); $date->add($datat); $cont++; }
05/02/2015
Ronaldo Lanhellas
$cont = 0; foreach($pdo->query($sql)as $row){ if ($cont == 0){ $date = new DateTime($row['ttotal']); } echo '<tr>'; echo '<td>'.$row['desct'].'</td>'; echo '<td>'.$row['solic'].'</td>'; echo '<td>'.$row['dtini'].'</td>'; echo '<td>'.$row['dtfnl'].'</td>'; echo '<td>'.$row['ttotal'].'</td>'; echo '<td>'.$row['status'].'</td>'; echo '</tr>'; $datat = new DateInterval($row['ttotal']); $date->add($datat); $cont++; }
09/02/2015
João Vitor
Ronaldo desse jeito não deu certo data erro relacionado ao date interval, então consegui fazer com essa função aqui:
function somaHora($arrayHora) { $segundos = 0; foreach ( $arrayHora as $tempo ) { list( $g, $i, $s ) = explode( ':', $tempo ); $segundos += $g * 3600; $segundos += $i * 60; $segundos += $s; } $horas = floor( $segundos / 3600 ); $segundos -= $horas * 3600; $minutos = floor( $segundos / 60 ); $segundos -= $minutos * 60; if(intval($horas) < 10) { $horas = "0".$horas; } if(intval($minutos) < 10) { $minutos = "0".$minutos; } return "{$horas}:{$minutos}"; } include 'includes/database.php'; $pdo = Database::connect(); $sql = "SELECT * FROM linha_dir"; $i = 0; foreach($pdo->query($sql)as $row){ $horaTotal = $row['ttotal']; echo '<tr>'; echo '<td>'.$row['desct'].'</td>'; echo '<td>'.$row['solic'].'</td>'; echo '<td>'.$row['dtini'].'</td>'; echo '<td>'.$row['dtfnl'].'</td>'; echo '<td>'.$row['ttotal'].'</td>'; echo '<td>'.$row['status'].'</td>'; echo '</tr>'; $arrayHora[$i] = $horaTotal; $i++; } Database::disconnect(); echo '<tr>'; echo '<th colspan = 4>Total :</th>'; echo '<td>'; echo somaHora($arrayHora); echo '</td>';
Só que acontece um único problema nela que é o seguinte, ele faze a conta certinha no grid, mas quando tem hora cheia ele não converte só os minutos.
exemplo:
Data 1 = 0000-00-00 00:50:00
Data 2 = 0000-00-00 00:20:00
Data 3 = 0000-00-00 01:00:00
o Resultado sai : 01:10
e deveria sair 02:10
outro exemplo é esse :
Data 1 = 0000-00-00 00:38:00
Data 2 = 0000-00-00 00:06:00
Data 3 = 0000-00-00 01:06:00
e ele retorna : 00:50
e era para retornar 01:50
Tem alguma dica? Valeuu!
Clique aqui para fazer login e interagir na Comunidade :)