Ir para conteúdo

POWERED BY:

Arquivado

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

Fernando José

Comparar horas

Recommended Posts

Olá pessoal,

 

Conforme sugestão dos amigos no tópico http://forum.imasters.com.br/index.php?/topic/366301-comparar-horas/page__pid__1403053__st__0entry1403053 resolvi abrir um tópico aqui, estou tentando comparar horas para ver as que estão em conflitos na agenda.

 

Preciso marcar em vermelho os eventos que estão conflitando as horas.

 

Tentei fazer o seguinte mas não funcionou.

 

while($linha4 = mysql_fetch_array($tabela4))
{
  $v_codigo[] = $linha4['codigo'];
  $v_hora_ini[] = strtotime($linha4['hora_ini']);
  $v_hora_fim[] = strtotime($linha4['hora_fim']);
  $v_conflito[] = FALSE;
}

for($i=0;$i<count($v_hora_ini);$i++)
{
        for($j=1;$j<count($v_hora_ini);$j++)
        {
                
                if(($v_hora_ini[$i] > $v_hora_ini[$j]) && ($v_hora_ini[$i] < $v_hora_fim[$j]))
                {
                        $v_conflito[$i]=TRUE;
                        $v_conflito[$j]=TRUE;
                        
                } else if(($v_hora_fim[$i] > $v_hora_ini[$j]) && ($v_hora_fim[$i] < $v_hora_fim[$j]))
                {
                        $v_conflito[$i]=TRUE;
                        $v_conflito[$j]=TRUE;
                        
                }
        }
        
}

Alguém poderia me ajudar? Estou sem saber como resolver.

 

Tksss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha me explique direitinho oq você qr, para a gente tentar montar uma lógica juntos ok?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha me explique direitinho oq você qr, para a gente tentar montar uma lógica juntos ok?

 

[]s

 

Olá,

 

Eu tenho uma tabela +/= assim

 

codigo INT

data DATE

hora_ini TIME

hora_fim TIME

 

Dai quando o usuario vai adicionando os eventos na agenda dele eu preciso verificar os horarios dos eventos e no final listar a agenda dele e colocar em vermelho os eventos que estao com conflitos de horarios.

 

Exemplo 01:

Se ele for participar de um evento das 10 as 17 e adiciona outro evento das 13 as 14 na listagem preciso avisar ele que tem horario com conflitos.

 

Tks

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente voce está no caminho.

Faz tempo que não trabalho com php, mas pelo que entendi até os dois for está correto.

Tente algo desse tipo:

 

for($i=0;$i<count($v_hora_ini);$i++)
{
        for($j=$i+1;$j<count($v_hora_ini);$j++)
        {
                // o conflito se caracteriza pelo seguinte
                // hora inicial do evento atual está entre a
                // hora inicial e a hora final do outro evento.

                if($v_hora_ini[$j] >= $v_hora_ini[$i] && $v_hora_ini[$j] < $v_hora_fim[$i]){
                        $v_conflito[$i]=TRUE;
                        $v_conflito[$j]=TRUE;
                }
        }
        
}

Voce precisa verificar também a se a data colide e não apenas o horário, mas isso já vai dar uma idéia da solução.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao,

 

Como temos apenas 4 datas fixas para ser colocado na agenda eu fiz 4 SELECT diferente, dai nao preciso verificar a data no for.

 

Eu acho que errei em alguma coisa no for porque nao esta dando certo.

 

Vou tentar o seu codigo daqui uma hora que estou em outro micro, dai aviso aqui.

 

TKs

 

 

Aparentemente voce está no caminho.

Faz tempo que não trabalho com php, mas pelo que entendi até os dois for está correto.

Tente algo desse tipo:

 

for($i=0;$i<count($v_hora_ini);$i++)
{
        for($j=$i+1;$j<count($v_hora_ini);$j++)
        {
                // o conflito se caracteriza pelo seguinte
                // hora inicial do evento atual está entre a
                // hora inicial e a hora final do outro evento.

                if($v_hora_ini[$j] >= $v_hora_ini[$i] && $v_hora_ini[$j] < $v_hora_fim[$i]){
                        $v_conflito[$i]=TRUE;
                        $v_conflito[$j]=TRUE;
                }
        }
        
}

Voce precisa verificar também a se a data colide e não apenas o horário, mas isso já vai dar uma idéia da solução.

 

Abraço!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kandrade funcionou sua lógica acabei de colocar aqui para rodar e nos primeiros testes funcionou.

 

Vou utilizar o código em uma agenda de congresso que estamos fazendo.

 

Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi nada. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Abraço!

 

Kandrade funcionou sua lógica acabei de colocar aqui para rodar e nos primeiros testes funcionou.

 

Vou utilizar o código em uma agenda de congresso que estamos fazendo.

 

Obrigado!!!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kandrade,

 

Olha me parece que tem uma falha no código.

Porque tenho que testar tanto hora inicial como hora final. No seu exemplo você esta testando apenas hora inicial.

 

Rodei uns testes com seu codigo.

 

Exemplo:

 

10:00-17:00 Palestra 01

11:00-13:00 Palestra 02

11:00-13:00 Palestra 03

 

Ele aponto conflito nos 3. Deu certo.

 

Exemplo 02:

 

08:30-13:00 Palestra 04

16:30-18:30 Palestra 05

14:00-18:30 Palestra 06

 

Ele não apontou os conflitos. Não deu certo. Tinha que ter apontado conflito nas Palestras 05 e 06.

 

O que acha?

 

Abraço.

 

Foi nada. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Abraço!

 

 

Kandrade funcionou sua lógica acabei de colocar aqui para rodar e nos primeiros testes funcionou.

 

Vou utilizar o código em uma agenda de congresso que estamos fazendo.

 

Obrigado!!!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara como n mecho com PHP vamos a lógica de como eu imagino isso:

Se (dia = algum_dia_da_agenda) Então
    Se (hora_ini > hora_ini_agenda E hora_ini < hora_fim_agenda) Então
        Conflito
    Senão Se (hora_fim > hora_ini_agenda E hora_hora_fim < hora_fim_agenda) Então
              Conflito
          Senão Nao_Conflito
          Fim_Se
    Fim_Se
    Senão Nao_Conflito
Fim_Se

[]s

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.