Ir para conteúdo

Arquivado

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

JohnBsB

Verifica horas entre hora de inicio e fim

Recommended Posts

Prezados,

Estou quebrando a cabeça para uma solução e não sei como resolver.

Preciso listar as horas e verificar se determinadas horas e minutos estão dentro de X e Y e riscar

Por exemplo

$X = "08:00"

$Y = "18:00"

$hora_marcada = array("13:15", "14:02", "16:27", "19:00");

resultado

08:00

09:00

10:00

11:00

12:00

13:00

14:00

15:00

16:00

...

Alguem sabe como posso criar essa função em PHP?

Obrigado!!!

John

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize a função strtotime( ), ela permite efetuar cálculos com data e hora facilmente... Dá uma olhada na documentação oficial do PHP...

Mas nos mostre como está fazendo para ajudarmos a melhorar seu código (e não fazer por você... -_- ).

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Paulo, obrigado pelo retorno

Na verdade eu preciso de uma lógica somente, mas veja como pensei:

Esse código monta as horas como preciso, até ai eu sei fazer tranquilo

<?php
$inicio_trabalho = "08:00";
$finaliza_trabalho = "18:00";
$period = new DatePeriod(
    new DateTime($inicio_trabalho),
    new DateInterval('PT1H'),
    new DateTime($finaliza_trabalho)
);
foreach ($period as $date) {
$new .=  "<div>".$date->format("H:i")."</div>";
}
echo $new;

Agora a parte de verificar se a hora está entre os horários específicos, se estiver, ele risca, se não, exibe normal.

$agendado = "12:59";
$data1 = DateTime::createFromFormat('H:i', $agendado);
$data2 = DateTime::createFromFormat('H:i', $inicio_trabalho);
$data3 = DateTime::createFromFormat('H:i', $finaliza_trabalho);

if ($data1 > $data2 && $data1 < $data3)
{
echo '<div class="risco">'.$agendado.'</div>';
}else{
echo $agendado;    
}

Agora a dúvida, como eu faço para juntar estas duas funções? a de listar e a de riscar.

Precisava ter mais horas agendadas e no momento não sei fazer algo como array para riscar outras horas, a função que montei só risca uma...

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, logicamente falando, você precisa fazer o seguinte: esse cálculo precisa estar dentro do foreach de $period. Tentei montar algum exemplo mas não consegui (por questões de tempo). Nunca usei as funções DateTime, nem conhecia o DatePeriod...

A comparação tem sempre que ser entre o horário que você está inserindo no loop (08:00, 09:00, 10:00, etc.) e esse horário mais 1 hora, definido assim o intervalo.

Monte um array com os horários agendados e coloque dentro do foreach também:

$agendamentos = array('09:37', '11:45', '12:59', '15:41');

foreach ($period as $date) {

    $class_risco = '';
 
    // Percorre os horários agendados e verifica se há algum agendamento para esse intervalo
    foreach($agendamentos as $agendado) {
        // Aqui você precisa calcular se $agendado está entre $date e $date + 1, e aplica o risco
        if(bla bla bla) {
            $class_risco = ' class="risco"';
        }
    }
 
    $new .= '<div'.$class_risco.'>'.$date->format("H:i").'</div>';

}

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.