Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
To com um problema na hora de soma os valores de horas minutos segundos tenho o seguinte
numero 54 9999-9999 duracao 00:00:15
numero 54 9999-9999 duracao 00:00:45
teria que ficar numero 54 9999-9999 duração 00:01:00 pórem fica assim 00:00:60
se o número já estiver no banco de dados eu somo a minutagem que está la...
meu code é o seguinte
calculo($arquivo = fopen("teste2.csv", "r"));
function calculo($arquivo){
while (($linha = fgets($arquivo)) !== FALSE) {
$pedacos = explode(";", $linha);
/PROCURAR PALAVRA/
$procurar = utf8_decode('Ligações para outros celulares');
$key = array_search($procurar, $pedacos);
if($key && $pedacos['3'] != ''){
//DEBUG
echo '<pre>';
echo 'Celular: '.$pedacos['1']. ' | Minutos: '.$pedacos['3']. ' | TIPO: '.$pedacos['4'];
echo '</pre>';
if($pedacos['4'] == $procurar){
$tipo_de_uso = '5';
}
$VeriNumero = read('calcule_sua_conta',"WHERE numero = '$pedacos[1]'");
if($VeriNumero >= 1){
foreach($VeriNumero as $Numero);
$tempo = $pedacos['3'];
$segundos = 0;
list( $h, $m, $s ) = explode( ':', $tempo );
$segundos += $h * 3600;
$segundos += $m * 60;
$segundos += $s;
$horas = floor( $segundos / 3600 );
$segundos %= 3600;
$minutos = floor( $segundos / 60 );
$segundos %= 60;
$t1 += $horas;
$t2 += $minutos;
$t3 += $segundos;
while( $t3 >= 60 ) {
$t2++;
$t3 = $t3 - 60;
}
while( $t2 >= 60 ) {
$t1++;
$t2 = $t2 - 60;
}
$tempo = $Numero['duracao'];
$segundos = 0;
list( $h, $m, $s ) = explode( ':', $tempo );
$segundos += $h * 3600;
$segundos += $m * 60;
$segundos += $s;
$horas = floor( $segundos / 3600 );
$segundos %= 3600;
$minutos = floor( $segundos / 60 );
$segundos %= 60;
$tt1 += $horas;
$tt2 += $minutos;
$tt3 += $segundos;
while( $tt3 >= 60 ) {
$tt2++;
$tt3 = $tt3 - 60;
}
while( $tt2 >= 60 ) {
$tt1++;
$tt2 = $tt2 - 60;
}
$total_min = str_pad($t1+$tt1,2,0,STR_PAD_LEFT).':'.str_pad($t2+$tt2,2,0,STR_PAD_LEFT).':'.str_pad($t3+$tt3,2,0,STR_PAD_LEFT);
//$total_min = ($Numero['minutos'] + $d1);
$up = mysql_query("UPDATE calcule_sua_conta SET duracao = '$total_min' WHERE numero = '$pedacos[1]'") or die(mysql_error());
echo $t1.':'.$t2.':'.$t3;$cad = mysql_query("INSERT INTO calcule_sua_conta (numero, duracao, tipo_de_uso)
VALUES ('$pedacos[1]', '$pedacos[3]', '$tipo_de_uso')") or die(mysql_error());
}
} //fim key search
}//fim leitura
}//function
não te entendi ainda como poderia isso resolver meu problema..
Entendi Gabriel Heming, consegui resolver implementando da maneira que você me disse.
Valeu aí fera abrass
Utilize a biblioteca DateTime, existem vários meios de se realizar o cálculo através dela.
Mas todos utilizam o princípio em criar o formato DateInterval e subtrair dois horários.
O exemplos que trago aqui serão, criar um "horário zero". E a partir desse "horário zero", verificar a diferença da soma dela mesma com os valores atribuídos.
O correto seria:
//"Horário zero"
$data = new DateTime('00:00:00');
//Horário para soma
//adiciona no horário para soma.
O segundo exemplo, evita a conversão dos formatos que você já possui. E faz exatamente a mesma coisa
//"Horário zero"
$data = new DateTime('00:00:00');
//Horário para soma
$total = new DateTime('00:00:00');
//intervalos de tempo
//Retorna o intervalo de tempo, no formato DateInterval e adiciona no horário para soma.
//retorna a diferença do "horário zero" com o horário somado.
echo $data->diff($total)->format('%H:%I:%S');Saída:
Apesar dos tempos serem intervalos de data, você não pode somar um DateInterval com outro, apenas adiciona-los a um DateTime existente, por isso da necessidade de um DateTime inicial e um para soma.