Ir para conteúdo

Arquivado

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

Iacóbus de Cártago

Acumulo de Horas

Recommended Posts

Muita coisa você faz com a Classe DateTime

 

Também tem as Funções de Data e Hora

 

No seu caso, talvez seja até mais simples converter para minutos, calcular e depois converter para o que quiser (horas, dias etc)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Reslovido, só precisei testar qual é maior e subtrair, depois inserir um sinal na string mesmo.

 

Bem simples a conversão.

function converteparasegundos($time) {
 	$hours = substr($time, 0, -6);
	$minutes = substr($time, -5, 2);
	$seconds = substr($time, -2);
	 
	return $hours * 3600 + $minutes * 60 + $seconds;
}
 
function converterparahoras($segundos){
 	$hours = floor($segundos / 3600);
	$segundos -= $hours * 3600;
	$minutes = floor($segundos / 60);
	$segundos -= $minutes * 60;
	 
	return sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);

Caso alguem se interessar aqui tem uma função que achei legal para somar um array de hroas.

function somar_horas($tempos) {
    $total_segundos = 0;
    foreach ($tempos as $tempo) {
        if (preg_match('/([+-]?)(\d{2}):(\d{2}):(\d{2})/', $tempo, $matches)) {
            $multiplicador = $matches[1] == '-' ? -1 : 1;
            $total_segundos += $multiplicador *
                               ((int)$matches[2] * 3600 + (int)$matches[3] * 60 + (int)$matches[4]);
        }
    }
    $sinal          = $total_segundos > 0 ? '' : '-';
    $horas          = floor($total_segundos / 3600);
    $total_segundos = $total_segundos % 3600;
    $minutos        = floor($total_segundos / 60);
    $segundos       = $total_segundos % 60;
    return sprintf('%02d:%02d:%02d', $horas, $minutos, $segundos);
}

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.