Somar horas com PHP + Conversão em Segundos


PHP

Esse é um daqueles vídeos que podemos chamar de vídeo “canivete suíço” porque em apenas uma aula você vai aprender a somar horas com PHP, mas também aprenderá:

  • Criar arrays;
  • Percorrer arrays usando o foreach;
  • Converter horas em segundos;
  • Manipular horas com PHP:  cálculo de soma;
  • Transformar segundos em horas.

O código completo deixo disponível no final do artigo e de quebra um vídeo com o passo a passo descrito.

Criação de array em PHP

Repare que a array é uma variável especial que tem a capacidade de armazenar inúmeras informações em um mesmo local. Veja o exemplo abaixo:

$lista = array("02:23:00", "03:01:02", "01:12:23");

Bem aqui armazenei algumas referências de horários em um mesmo local. Aqui seria possível informar quantos valores fossem necessários.

Agora basta saber como percorrer cada ponto.

Percorrendo arrays usando o foreach

Para isso usaremos o foreach:

foreach($lista as $item) {
    echo $item;
}

Para criar um loop dentro da array foi bem simples, informamos ali o nome da array e o nome de saída que o elemento terá, em cada passagem de dados, um valor diferente da array será exibido. Nesse ponto podemos verificar o fluxo de dados na programação, repare que só sairemos desse foreach depois que ele terminar de passar por cada posição anotada dentro da array:

Fluxo do foreach – ele irá do início ao fim enquanto não passar por todos os itens do array

Agora que conseguimos acessar cada hora informada dentro do array vamos ver como manipular.

Convertendo horas em segundos

Dentro do array você fará o seguinte:

list($horas,$minutos,$segundos) = explode(":",$item);
$calc = $horas * 3600 + $minutos * 60 + $segundos;

Aqui vamos aprender 2 outros recursos:

LIST – cria mais de uma variável ao mesmo tempo. Você tem que informar o nome das variáveis e informar o valor para cada variável. Essa função é muito utilizada com arrays;

EXPLODE – vai pegar a string e quebrará ela usando um caracter especial informado no array. Essa função é uma mão na roda. Deixa te mostrar um outro exemplo com explode:

$minha_string = "Valor 1|Valor 2|Valor 3";
$meu_array = explode("|", $minha_string);
echo $meu_array[1];

Aqui eu criei uma variável simples $minha_string e adicionei valores, separando por uma barra “|”. Em seguida utilizei o explode informando qual o caracteres especial que vai fazer a quebra dos valores.

Com isso foi criado uma array $meu_array contendo 3 valores = Valor 1, Valor 2 e Valor 3.

Outra dica é: para acessar esses valores sem precisar correr por eles, você pode simplesmente chamar a posição dele em colchetes, no caso $meu_array[1] retornaria: Valor 2. Isso porque uma array sempre começa do zero.

Somar horas com PHP

Uma vez que transformamos a hora em segundos, através do $calc, fica fácil somar horas com PHP. É só realizar uma soma simples:

$calc = $horas * 3600 + $minutos * 60 + $segundos;
$soma = $calc + $soma;

Não esqueça de declarar a variável $soma = 0 lá no topo, antes de entrar no foreach. Depois que você passar por todo o array você terá a variável $soma carregando consigo a soma total de segundos.

Agora, basta transformar esses segundos em hora:

Transformando segundos em horas

Para isso, escrevi uma função:

function segundos_em_tempo($segundos) {

 $horas = floor($segundos / 3600);
 $minutos = floor($segundos % 3600 / 60);
 $segundos = $segundos % 60;

 return sprintf("%d:%02d:%02d", $horas, $minutos, $segundos);

}

Fazemos os cálculos individuais de horas, minutos, segundos e montamos uma string de saída usando a função nativa sprintf, que substitui o “%” pela variável informada na sequência. O 02d que acompanha em minutos e segundos significa que quero que seja retornado como números inteiros de 2 casas, assim ficará formatado corretamente a hora.

Ufa…. foi uma uma aula que trouxe vários conceitos. Mas o segredo é praticar, praticar e praticar. Segue o código completo que utilizamos:

<?php

function segundos_em_tempo($segundos) {

 $horas = floor($segundos / 3600);
 $minutos = floor($segundos % 3600 / 60);
 $segundos = $segundos % 60;

 return sprintf("%02d:%02d:%02d", $horas, $minutos, $segundos);

}

$lista = array("02:23:00", "03:01:02", "01:12:23");

$soma = 0;

foreach($lista as $item) {
	list($horas,$minutos,$segundos) = explode(":",$item);
	$calc = $horas * 3600 + $minutos * 60 + $segundos;
	$soma = $calc + $soma;
}

echo "<p>Soma Total: " . segundos_em_tempo($soma) . "</p>";

?>

Para ver o código em execução e treinar com o código, acesse abaixo:

https://ideone.com/kaSLUr

Segue vídeo demonstrando todos os passos explicados aqui:

Gostou? Há muito mais em arrays e cálculo de horas, no meu treinamento explico detalhadamente cada etapa que passamos por aqui.

Para conhecer meu treinamento completo clique aqui

Val Branco

Programador há mais de 20 anos, instrutor e especialista em PHP.

Criador do método de treinamento EU POSSO PROGRAMAR.

Quer saber mais? Entre em contato