Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 ?
Procure pela função mktime do php com ela da para fazer
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:00Hora 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;
Caso deseje visualizar o código em ação, eu gosto de usar um interpretador online:
à todos vocês um muito obrigado, usei a função que Gabriel indicou e ficou perfeito mesmo.
>
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;
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
Cara vê se essas funções te ajuda.
Primeiro converta para segundos e depois para Horas novamente.
Agora é só você adaptar a sua necessidade