Ir para conteúdo

Arquivado

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

Bru_ce

Estrutura condicional.

Recommended Posts

Boa Tarde, estou aqui quebrando a cabeça aqui para fazer uma m***** de um if else !

Já tentei de TUDO, e não saí.

Seguinte, o um operador irá agendar a visita do cliente através de um sistema.

Vamos supor que agora seja 17h44.

A estrutura condicional seria à seguinte, vamos supor que um operador agente a visita para 10/09/2012 no caso hoje, às 21 horas, o nome deste cliente tem que aparecer em Verde pois ainda está em dia a visita, caso o operador agende a visita para o dia 10/09 às 13h, o nome deste cliente tem que aparecer em vermelho, pois o horário já foi ultrapassado.

 

Caso a visita seja agendada para 11/09 (amanhã), à qualquer hora o nome deste cliente tem que aparecer em cinza.

 

A hora que operador agenda a visita ela entra no banco de dados assim 09/10/2012 04:30 pm

aí então eu quebro ela, para pegar só a data assim -> 09/10/2012, depois quebro novamente para pegar a hora assim -> 04:30 e depois faço a comparação.

 

Segue meu código.

 

while($row5 = mysql_fetch_array($busca5)){
$pegaData = $row5['data_agendada'];
$pegaData = (substr($pegaData, 0, 10));
$pegaHora = $row5['data_agendada'];
$pegaHora = (substr($pegaHora, 10, 6));

$data = date("m/d/Y");
$hora = date("H:i");
echo $hora;

	if ($data < $pegaData) {
		$corhoje = "#dbdbdb";
	}
	elseif ($data <= $pegaData && $hora > $pegaHora){
		$corhoje = "#ff0000";
	}
	elseif ($data == $pegaData && $hora <= $pegaHora){
		$corhoje = "green";
	}

 

Se alguém tiver alguma coisa que possa ser útil, valeo ! :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

A classe DateTime, mais especificamente o método DateTime::diff() resolve seu problema.

 

Não gosto muito de postar a resposta pronta mas o farei devido à um fator atenuante nem sempre tão óbvio:

 

date_default_timezone_set( 'America/Sao_Paulo' );

$date = new DateTime;

$interval = $date -> diff( new DateTime( '2012-09-10 13:44' ) );

var_dump( $interval );

Criamos na variável $date um objeto DateTime sem parâmetros o que faz com ele seja definido para a data atual completa (desde o dia até o segundo).

 

Na variável $interval computamos a diferença. Ela recebe como argumento um novo objeto DateTime com a data, também completa, daquilo que você quer computar a diferença a partir da data atual.

 

No seu caso é aqui que entra a data da visita agendada.

 

Aquilo que não fica muito óbvio que eu citei é que normalmente esperaríamos ver na saída algum valor negativo caso a data atual seja maior que a data a qual estamos computando a diferença.

 

NÃO É ISSO QUE ACONTECE!

 

Ao invés disso temos uma informação adicional retornada na propriedade DateInterval::invert

 

Se o valor nela armazenado por 0 (zero) temos uma diferença positiva. Se for 1, temos uma diferença negativa

 

Nesse código acima temos como retorno (na hora que rodei pela última vez):

 

object(DateInterval)[3]
 public 'y' => int 0
 public 'm' => int 0
 public 'd' => int 0
 public 'h' => int 6
 public 'i' => int 16
 public 's' => int 37
 public 'invert' => int 1
 public 'days' => int 0

Isso significaria no seu sistema que a data da visita ocorreu 6 horas, 17 minutos e 37 segundos atrás.

 

Agora, com essas informações mais concisas, montar seu condicional ficará moleza. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde Chará, Cara não consegui!

Estou aqui no trampo desde as 9h da manhã até agora.

Já fiz tudo que você possa imaginar,

 

Estava tentando desta forma, creio que esteja quase lá ..

 

while($row5 = mysql_fetch_array($busca5)){
$data = date("d/m/Y");$hora = date("h:i a");
$horaManipulada = strtotime($hora);
$dataManipulada = strtotime($data);
// QUEBRANDO DATA BANCO
$data_banco = $row5['data_agendada'];
$dia_banco = substr($data_banco, 0, 10);
$hora_banco = substr($data_banco,11,8);
$hora_bancoManipulada = strtotime($hora_banco);
$data_bancoManipulada = strtotime($dia_banco);

if($dataManipulada < $data_bancoManipulada){
	$corhoje = "#dbdbdb";
}

 

Me ajuda rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos enumerar alguns pontos:

 

- A forma que você fez atende sua necessidade?

 

- A forma que você fez é de fácil compreensão/manutenção

 

Se para quaisquer dessas perguntas você responder um Sim, já é mais do que recomendado você pensar numa solução diferente e a que propus é sem dúvidas a melhor, afinal a classe DateTime praticamente nasceu para por fim nos problemas de manipulação de tempo.

 

Quer um exemplo? Olha a gambiarra que você fez para separar os componentes da data. Através de DateInterval::createFromString() você não precisa contornar nada.

 

O formato de data no seu banco é diferente? Não importa! Olha que lindo o que o amigo @hufersil forneceu pra gente.

 

Caso seu servidor não seja inferior à versão 5.3 (requerimento para a função acima) ele mesmo forneceu outra em substituição.

 

O objeto DateInterval retornado é basicamente composto por propriedades públicas então todas as suas condições, aninhadas ou não (olha a dica!) serão feitas no seguinte formato:

 

if( $interval -> invert == 1 ) {

   // Negative Interval. Do something

} else {

   // Positive Interval. Do something else

}

Bons estudos :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você disse que não conseguiu o que implica em você ter tentado. Como você fez?

 

Dificilmente você vai conseguir que alguém resolva seus problemas aqui no fórum. Fazemos de tudo para ensinar a pessoa a fazer sozinha.

 

Afinal, de que adianta eu fazer pra você e daqui há um tempo quando você precisar implementar alguma outra funcionalidade que conflite com o que eu fiz você não souber resolver sozinho?

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.