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:

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:
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.