Ir para conteúdo

POWERED BY:

Arquivado

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

Marcos Barbosa

somar minutos a hora

Recommended Posts

Olá pessoal, tô com um probleminha de LÓGICA que tá atrasando todo, seguinte:

Tenho um formulário para tenho os campos:

Hora inicio

Hora fim

minutos

 

O objetivo é, entrar com a hora de inicio, hora de final e minutos. Depois eu gero uma tabela de horas somando a data inicio aos minutos informados até que preencher todo o intervalo entre a hora de inicio e a hora final, assim:

hora inicio: 07:00 hora final: 08:00 minutos: 20

Isso vai gerar:

07:00

07:20

07:40

08:00

 

Se colocar no minuto = 10

07:10

07:20

07:30

07:40

07:50

08:00

 

Meu código está assim:

$novaHora1 = $turno1_inicio;

for ($i=0; $i <= $turno1_fim; $i++){

  $horaNova = strtotime("$novaHora1 + $duracao minutes");
  $horaFormatada = date("H:i",$horaNova);

  echo "Nova Hora :".$horaFormatada."<br>";
  $novaHora1 = $horaFormatada;
	}

Se colocar hora inicial 07:00

hora final 08:00

Acontece que ele faz o somatório 8 vezes, assim:

Nova Hora :07:20

Nova Hora :07:40

Nova Hora :08:00

Nova Hora :08:20

Nova Hora :08:40

Nova Hora :09:00

Nova Hora :09:20

Nova Hora :09:40

Nova Hora :10:00

 

Sei que na variável $i eu devo colocar a inicio e no $i++ colocar o valor em horas, mas não estou conseguindo resolver isso.

 

Alguém pode me ajudar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara vê se essas funções te ajuda.

 

Primeiro converta para segundos e depois para Horas novamente.

 

function converteSegundos($tempo){
   if($tempo != ""){
       $array = explode(":", $tempo); 
       $hor = $array[0]; 
       $min = $array[1]; 

       $horas_em_segundos = $hor * 3600; //transforma as horas em segundos 
       $minutos_em_segundos = $min * 60; //transforma os minutos em segundos 

       $tempo_em_segundos = $horas_em_segundos + $minutos_em_segundos; //soma todos os segundos 

       return $tempo_em_segundos;
   }
}


function converteHoras($segundos){
   $horas = 0;

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

   if ($horas < 10) $horas = "0".$horas; 
   if ($minutos < 10) $minutos = "0".$minutos; 

   return $horas.":".$minutos; 

}

 

Agora é só você adaptar a sua necessidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

As dicas são boas, mas para versões antigas do PHP. Caso você possua a versão do PHP >= 5.3, sugiro o que vem à seguir.

 

Desde o PHP 5.2, há a possibilidade de utilizar a biblioteca DateTime, que oferece um conjunto completo de ferramentas para trabalhar com data e/ou hora.

 

Na versão 5.3, foi introduzido a classe DateInterval, o qual trabalha com intervalos de data/hora.

 

O código abaixo faz o que você deseja, em uma lógica simples, com poucas linhas de código:

//hora inicial
$horaInicial = new DateTime('07:00');

//hora final
$horaFinal = new DateTime('08:00');

echo 'Hora Inicial: '.$horaInicial->format('H:i')."<br />";

//O valor é somado dentro do while, para evitar que repita a hora final
while($horaInicial->add(new DateInterval('PT20M')) < $horaFinal) {   
  echo 'Hora intermediária: '.$horaInicial->format('H:i')."<br />";
}
echo 'Hora Final: '.$horaFinal->format('H:i')."<br />";

 

Saída:

Hora Inicial: 07:00

Hora intermediária: 07:20

Hora intermediária: 07:40

Hora Final: 08:00

 

O formato PT20M refere-se:

- P -> Token inicial;

- T -> Token que indica tempo/horários (Time);

- 20 -> valor do período;

- M -> Token indicando que o valor anterior (20) é referente a minutos (minutes).

 

Caso deseje visualizar o código em ação, eu gosto de usar um interpretador online:

http://codepad.viper-7.com/fZhYHF

Compartilhar este post


Link para o post
Compartilhar em outros sites

As dicas são boas, mas para versões antigas do PHP. Caso você possua a versão do PHP >= 5.3, sugiro o que vem à seguir.

 

Desde o PHP 5.2, há a possibilidade de utilizar a biblioteca DateTime, que oferece um conjunto completo de ferramentas para trabalhar com data e/ou hora.

 

Na versão 5.3, foi introduzido a classe DateInterval, o qual trabalha com intervalos de data/hora.

 

O código abaixo faz o que você deseja, em uma lógica simples, com poucas linhas de código:

//hora inicial
$horaInicial = new DateTime('07:00');

//hora final
$horaFinal = new DateTime('08:00');

echo 'Hora Inicial: '.$horaInicial->format('H:i')."<br />";

//O valor é somado dentro do while, para evitar que repita a hora final
while($horaInicial->add(new DateInterval('PT20M')) < $horaFinal) {   
  echo 'Hora intermediária: '.$horaInicial->format('H:i')."<br />";
}
echo 'Hora Final: '.$horaFinal->format('H:i')."<br />";

 

Saída:

 

 

O formato PT20M refere-se:

- P -> Token inicial;

- T -> Token que indica tempo/horários (Time);

- 20 -> valor do período;

- M -> Token indicando que o valor anterior (20) é referente a minutos (minutes).

 

Caso deseje visualizar o código em ação, eu gosto de usar um interpretador online:

http://codepad.viper-7.com/fZhYHF

 

Boa Gabriel.. Foi bom para eu aprender também..

abraço

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.