Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexandre Carmo

[Resolvido] Erro no calculo de horas

Recommended Posts

Boa tarde

 

Pessoal criei uma classe que faz subtração de horas, ela funciona normalmente quando subtraio horas onde cada variável tenha o valor de horas inferior a 23:59:59, caso passe disso ela não calcula, e preciso cacular horas com valors maiores tipo, 67:30:20 - 48:000. Para isso uso a strtotime, vejam com fiz:

function subtrairHoras($horaPrincipal,$horaSubtrair)
   {
       $diferenca = strtotime($horaPrincipal) - strtotime($horaSubtrair);
$hora = floor($diferenca / 3600); // valor de horas inteiras
       $diferenca %= 3600; // subtrai as horas inteiras da diferença
       $minuto = $diferenca / 60; // minutos que restaram

       return $hora . ":" . $minuto . ":00";
   }

 

O que eu deveria usar para calcular horas onde cada campo pode passar de 23:59:59?

 

Galera ninguém tem idéia de como resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver, criei uma função diferente que aceita qualquer valor em horas

function SubtrairHoras($horasX,$horasY)
   {
       $x = explode(':', $horasX);
       $horas = $x[0]; // Pega as horas (2)
       $minutos =  $x[1]; // Pega os minutos (10)
       $total = ($horas * 60) + $minutos; // Calcula o total de minutos: (2 * 60) + 10 = 130 minutos

       $x2 = explode(':', $horasY);
       $horas2 = $x2[0]; // Pega as horas (2)
       $minutos2 =  $x2[1]; // Pega os minutos (10)
       $total2 = ($horas2 * 60) + $minutos2; // Calcula o total de minutos: (2 * 60) + 10 = 130 minutos

       $total3 = $total - $total2;

       $resultado = $total3; // Total de minutos, no caso 260
       $horas_finais = (int)($resultado / 60); // Calcula as horas de 260 minutos: 4 horas
       $minutos_finais = str_pad((int)($resultado % 60), 2, "0", STR_PAD_LEFT); // Calcula os minutos finais: 20 minutos

       return $horas_finais . ":" . $minutos_finais;
   }

Espero que seja útil

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.