Ir para conteúdo

POWERED BY:

Arquivado

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

Danv

Comparando Datas

Recommended Posts

Olá pessoal,Estou tentando fazer uma comparação entre duas datas.... mas não estou conseguindo....Uma das datas esta cadastrado no DB, a outra é a data atual.Uma das tentativas foi o seguinte....apos o rs, setei as variaveis:$data_atual = date('d/m/Y');$data_reg = $row_rsRespE['data2'];a comparação:if($data_reg >= $data_atual)não dá certo.... ehehe, eu quase consigo imaginar porque.... se não fosse o quase...Será que alguem saberia como posso fazer isso?Desde já, valeu pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeiro, 08/01/2004 é numero? Isso nao tem valor numero embora tenha numeros. Comparacoes de <> sao feitos para variaveis de valor numerico.outro detalhe, a sua comparacao é inutil, uma vez que a data de um registro ou sera menor ou igual a data atual, nunca sera maior. ;P a nao ser que o servidor volte no tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

posé Keitaro...eu tenho uma data registrada.... exemplo12/01/2005preciso saber se a data atual é igual ou maior que esta... se a data atual for anterior a esta tera um comando.... se não tera outro....valeu pela dica.... mas alguem saberia como fazer esta comparação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teste da maneira abaixo...

<?//PREPARANDO DATA ATUAL$data = date("d/m/Y");$data_atual = explode("/", $data);$dia_atual = $data_atual[0];$mes_atual = $data_atual[2];$ano_atual = $data_atual[4];//PREPARANDO DATA ANTIGA$data_antiga = explode("/", $row_rsRespE['data2']);$dia_antigo = $data_antiga[0];$mes_antigo = $data_antiga[2];$ano_antigo = $data_antiga[4];//COMPARANDOif (($dia_atual > $dia_antigo) || ($mes_atual >= $mes_antigo) || ($ano_atual >= $ano_antigo)) {  echo "Data atual </b>$dia_atual/$mes_atual/$ano_atual</b> é maior que  a data antiga <b>$dia_antigo/$mes_antigo/$ano_antigo</b>";}if....?>

As condiçoes sao poucas e fáceis de fazer...

Compartilhar este post


Link para o post
Compartilhar em outros sites

grldesign, desse modo que você mostrou não é seguro o correto é usar funções próprias do PHP. Um exemplo usando strtotime:

<? function diferenca_dias($inicial,$final){  $inicial = strtotime($inicial); // 07/04/2003 (mm/dd/aaaa) data menor  $final = strtotime($final);    // 07/10/2003 (mm/dd/aaaa) data maior  return ($final-$inicial)/86400; //transformação do timestamp em dias }$inicial = "07/04/2003";$final = "07/10/2003";echo diferenca_dias($inicial,$final);?>

valor positivo: $final > $inicialvalor negativo: $final < $inicialvalor igual a zero: $final == $inicialobs: para calcular o strtotime é preciso informar a data no seguinte formato:mm/dd/aaaa, caso contrário ocorrerá erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é que não seja seguro, o porém é que existem condições, e se o programador esquecer um ai da problema.Precisa de perícia ali pra elaborar tudo...Mas seu codigo com certeza é mais facil...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser por comando mysql (com a data no banco assim: dd/mm/YYYY:

SELECT * FROM tabela where TO_DAYS(CONCAT(SUBSTRING(data,7,4),"-",SUBSTRING(data,4,2),"-",SUBSTRING(data,0,2)) >= TO_DAYS(timestamp())
Acho que assim dá certo, tenta aí. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O WXKJ esta certo.tem uma função que retorna um numero inteiro de segundos de uma determinada data a´te um certo dia de 1970 ( esse dia é padrão). Se eu nao me engano é a Função mktime. Dai para comparar as datas era só ver qual data tem o maio mktime ( maior numero de segundos desde 1970). A que tiver mais é mais recente.Dá uma pesquisada nesse sentido . Até mais =].

Compartilhar este post


Link para o post
Compartilhar em outros sites

vixi.... fiquei quebrando a cabeça e a partir do que o grldesign me passou cheguei aqui....

 

<?phpif($_GET['i'] == "ok"){	//PREPARANDO DATA ATUAL	$data = date("Ymd");    $ano_atual = substr($data, 0, 4);    $mes_atual = substr($data, 5, 2);    $dia_atual = substr($data, 7, 2);	//PREPARANDO DATA ANTIGA	$datac = $row_rsRespE['data2'];    $ano_c = substr($datac, 0, 4);    $mes_c = substr($datac, 5, 2);    $dia_c = substr($datac, 8, 2);	//COMPARANDO	if($ano_c == $ano_atual){  if($mes_c == $mes_atual){ 	 if($dia_c >= $dia_atual){ 	 header ("Location: inicio.php"); 	 }else{ 	 header ("Location: clientes_v.php"); 	 }  }elseif($mes_c > $mes_atual){ 	 header ("Location: inicio.php");  }else{ 	 header ("Location: clientes_v.php");  }	}elseif($ano_c > $ano_atual){	header ("Location: clientes_v.php");	}elseif($ano_c < $ano_atual){	header ("Location: inicio.php");	} 	 }?>
:blink:

 

é que ocorre a seguinte situação, tem uma pagina [clientes.php] que mostras uma listagem de clientes, mas para acessar um cliente é necessário setar a data de inicio do serviço (gestão anual) então em [clientes.php] o link para visualizar os dados do cliente (que seria em clientes_v.php) o link é para [inicio.php], mas na pagina da listagem de clientes [cliente.php] já é feita a consulta de cada cliente se já foi iniciado o serviço ou não , se já foi iniciado é colocado um parametro no link [inicio.php?i=ok], o link de visualização cai na verificação acima para saber se a data não venceu.... se já venceu, é necessário cadastrar uma nova data para inicio dos serviços.

 

deu para entender?

 

o script acima esta funcionando perfeitamente, mas vou tentar utilizar como foi indicado abaixo.

 

Valeu pessoal, qualquer coisa tamo ae.

 

grldesign, desse modo que você mostrou não é seguro o correto é usar funções próprias do PHP. Um exemplo usando strtotime:

 

 

<?

function diferenca_dias($inicial,$final){

  $inicial = strtotime($inicial); // 07/04/2003 (mm/dd/aaaa) data menor

  $final = strtotime($final);    // 07/10/2003 (mm/dd/aaaa) data maior

  return ($final-$inicial)/86400; //transformação do timestamp em dias

}

 

 

$inicial = "07/04/2003";

$final = "07/10/2003";

echo diferenca_dias($inicial,$final);

?>

valor positivo: $final > $inicial

valor negativo: $final < $inicial

valor igual a zero: $final == $inicial

 

 

obs: para calcular o strtotime é preciso informar a data no seguinte formato:

mm/dd/aaaa, caso contrário ocorrerá erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a classe DateTime

 

<?php

$date_time = new DateTime( '2012-06-22' ); // data cadastrada no banco de dados

$diff      = $date_time->diff( new DateTime( ) ); // data atual

if( $diff->d > 0 )
{
   echo 'Data atual é maior que a data cadastrada!';
}
elseif( $diff->d == 0 and $diff->invert == 0 )
{
   echo 'Data atual é igual a de hoje!';
}
else
{
   printf( 'Falta(m) %u dia(s)', $diff->invert );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem função já pronta.

 

<?php 
       function dataDif($data1, $data2, $intervalo) {

           switch ($intervalo) {
               case 'y':
                   $Q = 86400*365;
                   break; //ano
               case 'm':
                   $Q = 2592000;
                   break; //mes
               case 'd':
                   $Q = 86400;
                   break; //dia
               case 'h':
                   $Q = 3600;
                   break; //hora
               case 'n':
                   $Q = 60;
                   break; //minuto
               default:
                   $Q = 1;
                   break; //segundo
           }

           return round((strtotime($data2) - strtotime($data1)) / $Q);
       }

 

depois voce chama a funcao assim:

 

$intervalo_mes = dataDif($data1, $data2, 'm')

 

as opções existente na funcao voce escolhe, atraves das letras.

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.