Ir para conteúdo

POWERED BY:

Arquivado

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

Roberto_S_Luz

[Resolvido] Comparar Datas

Recommended Posts

Salve...salve galera!!!

 

Venho trazer uma duvidasinha para você's.

 

Bom...tenho o seguinte codigo que estou testando

echo '<br>Data 1 ='.$data10 =  '5/8/2009';
echo '<br>Data 2 ='.$data20 =  '2/12/2009' ;//date('j/n/Y');

echo '<br>Data 1 Convertido ='.$data1 = strtotime($data10);
echo '<br>Data 2 Convertido ='.$data2 = strtotime($data20);
if($data1 > $data2){
	echo '<br><br>Data 1 é maior';
}
if($data2 > $data1){
	echo '<br><br>Data 2 é maior';
}

Esse será o resultado

Data 1 =5/8/2009

Data 2 =2/12/2009

Data 1 Convertido =1241751600

Data 2 Convertido =1234404000

 

Data 1 é maior

 

Bom...esse é apenas um teste para que você's possam entender o que eu quero fazer.

 

Reparem que, a data 2 mesmo sendo maior que a data 1 consta que é menor. De acordo o strtotime quando ele converte ele inicia pelos dias (de acordo com a data fornecida)daí mesmo a segunda data sendo maior, o inicio dela é menor(pois o dia é 2) ,então...a data fica errada (bom...é o que eu acho...rssss http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif ).

 

Bom...o lance é meio simples mais meio complicado de explicar, mais espero que tenham entendido.

 

Então como fazer essa comparação corretamente ou qual a melhor forma???

 

Desde já...agradeço à todos e se souberem de alguma dica, por favor, postem aí, pois isso é para um controle de venda de passes e o controle é feito atraves de datas...e isso já tá me fazendo ficar careca...rsss http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

 

Abraços galera!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

strtotime

A função espera que seja dado uma string contendo um formato de data em inglês US [...]

echo '<br>Data 1 ='.$data10 =  '5/8/2009';
echo '<br>Data 2 ='.$data20 =  '2/12/2009' ;//date('j/n/Y');
~>

echo '<br>Data 1 ='.$data10 =  '2009-8-5';
echo '<br>Data 2 ='.$data20 =  '2009-12-2';

Compartilhar este post


Link para o post
Compartilhar em outros sites

strtotime

A função espera que seja dado uma string contendo um formato de data em inglês US [...]

As duas principais linhas quando se trabalha com data são:

 

setlocale( LC_ALL , 'pt_br' );
date_default_timezone_set( "America/Sao_Paulo" );

Dessa forma, definimos as regras de localização para o Brasil e definimos também o timezone para o de Sao Paulo (pode ser de outra região também).

 

Feito isso, basta agora utilizar as funções strptime para interpretar a data passada e então mktime para gerar um timestamp:

 

$data1 = "5/8/2009";
$data2 = "2/12/2009";
$darr1 = strptime( $data1 , "%d/%m/%Y" );
$darr2 = strptime( $data2 , "%d/%m/%Y" );
$tstp1 = mktime( 0 , 0 , 0 , $darr1[ "tm_mon" ] + 1 , $darr1[ "tm_mday" ] , $darr1[ "tm_year" ] + 1900 );
$tstp2 = mktime( 0 , 0 , 0 , $darr2[ "tm_mon" ] + 1 , $darr2[ "tm_mday" ] , $darr2[ "tm_year" ] + 1900 );

if ( $tstp1 > $tstp2 )
    printf( "A data %s é maior que %s" , date( "d/m/Y" , $tstp1 ) , date( "d/m/Y" , $tstp2 ) );
elseif ( $tstp1 < $tstp2 )
    printf( "A data %s é maior que %s" , date( "d/m/Y" , $tstp2 ) , date( "d/m/Y" , $tstp1 ) );
else
    printf( "As datas %s e %s são iguais" , date( "d/m/Y" , $tstp1 ) , date( "d/m/Y" , $tstp2 ) );

A saída com essas datas será:

 

A data 02/12/2009 é maior que 05/08/2009

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caracas...mesmo eu fazendo um monte de pesquisas não sabia disso..."Tô bobo, rsss".

 

Bom...eu entendi direitinho aí as vossas explicações...inclusive agradeço à você's (Lucas Guima e João Batista Neto) pela atenção...porém...deu o seguinte erro.

Fatal error: Call to undefined function strptime() in D:\AppServ\www\pagina_teste.php on line 156

Será preciso atualizar o meu PHP? Mas já estou utilizando a versão 5.

 

Pesquisei sobre a função strptime() no site do manual do PHP e é igual você's passaram aí.

 

Então...qual é o problema? Será burrice minha mesmo http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif ?

 

Abraços galera!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lucas Guima, em 06 agosto 2009 - 00:20 , disse:

 

strtotime

A função espera que seja dado uma string contendo um formato de data em inglês US [...]

 

echo '<br>Data 1 ='.$data10 = '2009-8-5';

echo '<br>Data 2 ='.$data20 = '2009-12-2';

 

Bom...de acordo com as dicas dos camaradas aí, eu fiz da seguinte maneira:

Pego a data normalmente explodo ela conforme o exemplo do João Batista Neto (menos a parte do strptime, pois aki num deu certo), daí coloco-a para o formato em inglês US conforme a dica do Lucas Guimae em seguida comparo as danadas utilizando o strtotime() e tá funcionando legal.(Pelo menos com os testes que consegui imaginar tá funcionando...rsss) http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

 


echo "<br>Data 1 = ".$data_2 = "1/6/2010";echo " = Formato dia/mes/ano";
echo "<br>Data 2 = ".$data_3 = "10/12/2009";echo " = Formato dia/mes/ano";
$arr_1 = explode("/", $data_2);
$arr_2 = explode("/", $data_3);

echo "<br>Nova Data 1  = ".$data_01 = $arr_1[1]."/".$arr_1[0]."/".$arr_1[2];echo " = Formato mes/dia/ano";
echo "<br>Nova Data 2 = ".$data_02 = $arr_2[1]."/".$arr_2[0]."/".$arr_2[2];echo " = Formato mes/dia/ano";

if(strtotime($data_01) > strtotime($data_02)){
        echo '<br><br>Data 1 é maior';
}
if(strtotime($data_02) > strtotime($data_01)){
        echo '<br><br>Data 2 é maior';
}

o Resultado será:

 

Data 1 = 1/6/2010 = Formato dia/mes/ano

Data 2 = 10/12/2009 = Formato dia/mes/ano

Nova Data 1 = 6/1/2010 = Formato mes/dia/ano

Nova Data 2 = 12/10/2009 = Formato mes/dia/ano

 

Data 1 é maior

 

Galera...você's como sempre... ajudam bastante. http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Um grande abraço e muito obrigado pela atenção. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom...de acordo com as dicas dos camaradas aí, eu fiz da seguinte maneira:

Pego a data normalmente explodo ela conforme o exemplo do João Batista Neto (menos a parte do strptime, pois aki num deu certo), daí coloco-a para o formato em inglês US conforme a dica do Lucas

 

 

Data 1 = 1/6/2010 = Formato dia/mes/ano

Data 2 = 10/12/2009 = Formato dia/mes/ano

 

Bom, aqui vai outra dica: Se você observar a construção de uma data, verá que se invertermos tudo para yyyymmdd você conseguirá fazer uma comparação numérica da data, sem se preocupar com as funções nativas, por exemplo:

 

ORIGINAL1 = 1/6/2010

INVERTIDA1 = 20100601

 

ORIGINAL2 = 10/12/2009

INVERTIDA2 = 20091210

 

Como você pode ver, 20100601 é de fato maior que 20091210, para fazer isso no PHP ficaria assim:

 

 /**
  * Converte uma data em string para uma representação numérica
  * @param string $str_date A data em string
  * @return integer A representação numérica da data
  */
 function dton( $str_date ){
     return( (int) vsprintf( "%04d%02d%02d" , array_reverse( explode( "/" , $str_date ) ) ) );
 }
 
 $original1 = "1/6/2009";
 $original2 = "10/12/2010";
 
 echo sprintf( "A data %s é maior." , dton( $original1 ) > dton( $original2 ) ? $original1 : $original2 );

A saída será: A data 10/12/2010 é maior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm....bacana João Batista Neto, taí outra forma que eu não sabia...

A minha para converter data, fiz da seguinte maneira:

public function converter_data($data){
			
	 data_1 = explode("/", $data);

       	 return $data_2 = $data_1[1]."/".$data_1[0]."/".$data_1[2];
 }
public function processar(){

$data_atual        = $this->converter_data(date("j/n/Y"));
$data_venda_atual  = $this->converter_data($this->pas_data);

    if(strtotime($data_venda_atual) < strtotime($data_atual)){
               
     ...

    }
}
Daí ela já retorna no formato "m/d/Y" e utilizando o strtotime dá pra fazer a comparação de boa. Mas essa sua é menos linhas de código, rsss.

Bom...obrigado João Batista Neto, acho que vou utilizar a sua forma.

 

Abraços http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.