Fernando José 0 Denunciar post Postado Outubro 10, 2009 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
quitZAUMMM 18 Denunciar post Postado Outubro 11, 2009 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
Fernando José 0 Denunciar post Postado Outubro 11, 2009 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
Kandrade 7 Denunciar post Postado Outubro 12, 2009 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
Fernando José 0 Denunciar post Postado Outubro 12, 2009 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
Fernando José 0 Denunciar post Postado Outubro 12, 2009 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 7 Denunciar post Postado Outubro 12, 2009 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
Fernando José 0 Denunciar post Postado Outubro 12, 2009 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
quitZAUMMM 18 Denunciar post Postado Outubro 12, 2009 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
Kandrade 7 Denunciar post Postado Outubro 12, 2009 Voce tem razão, só aquela condição não resolve todo o problema. Teste o algorito acima do Quit. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites