Dúvida com datas em PHP

Pergunta
Olá a todos.

Tenho um problema, estou fazendo um formulário onde o usuário pode ter a opção de fazer a busca entre duas datas.

Os resultados que se mostrem devem estar compreendidos entre essas datas.

Reduzi o fundamental:


<?php



$data1=31/12/1999;
$data2=05/10/2005;

$data=20/01/2003;



$data1 = addslashes($data1);
$data2 = addslashes ($data2);
$data = addslashes ($data);



if ($data1<$data)
{
if ($data2<$data)
echo "data2 é menor que data";
else
echo "data2 é maior que data";
}
else
echo "data1 é maior que data";

?>



Mudei a forma de colocar a data, etc, e por exemplo, neste caso me diz que data2 é menor que data.

Onde está o erro?
Muito obrigado

Valorize esta FAQ:
A FAQ Dúvida com datas em PHP tem Pertence à categoria:
Resposta
Olá, responderei sua dúvida de acordo com o que você postou.

Primeiro, há um erro na declaração de suas variáveis, lembre que em php e em algumas outras linguagens, por não dizer na maioria, o símbolo slash / é um símbolo de divisão por isso, ao declarar suas variáveis sem aspas não está declarando uma cadeia de data e sim, uma divisão, por exemplo:

$data1=31/12/1999 = 0,0012923128230782057695514423878606
$data2=05/10/2005 = 2,4937655860349127182044887780549e-4
$data=20/01/2003 = 9,9850224663005491762356465302047e-4
Daí começa o problema de seus resultados inesperados.

Por isso, tem que declarar as datas como se estivesse declarando string da seguinte maneira:

$data1="31/12/1999";
$data2="05/10/2005";
$data="20/01/2003";
Sugiro que estas comparações de datas sejam feitas com inteiros, ou seja, passando as datas a inteiros para ser mais precisos, poderá fazê-lo como segue:

$data1Int = mktime(0,0,0,substr($data1,3,2), substr($data1,0,2), substr($data1,6,4));
$data2Int = mktime(0,0,0,substr($data2,3,2), substr($data2,0,2), substr($data2,6,4));
$dataInt = mktime(0,0,0,substr($data,3,2), substr($data,0,2), substr($data,6,4));

Bom, é uma das formas e logo sua pergunta com os dados inteiros:

if ($data1Int<$dataInt)
{
if ($data2Int<$dataInt)
echo "data2 é menor que data";
else
echo "data2 é maior que data";
}
else
echo "data1 é maior que data";

Sugiro que revise um pouco os padrões de programação, porque nessas poucas linhas de código que você postou há muita desordem sem querer ofender, isso é péssimo para quando quiser fazer manutenção às suas aplicações. Você pode aplicar padrões de Pear ou de Zend que são similares.

Saudações e espero ter lhe ajudado em algo.

Por Horacio Santa Cruz

Voltar à árvore de categorias Voltar à árvore de categorias

 
FAQs relacionadas
  + O que você necessita para começar a programar uma página web?
  + Sistema protegido por usuário e senha
  + Inserção controlando duplicados
  + Como posso fazer com que o navegador detecte plugins
  + Web em dois idiomas
  + Introdução ao desenvolvimento web
  + Diferenças entre redirecionamentos 301 e 302
  + Obter dados de um banco para construir meus javascripts
  + Tirar quebras de linha em um TXT
  + Documento padrão
  + Evitar a edição manual de parâmetros da URL
  + Passar variáveis de ASP ou PHP para Javascript ou vice-versa
  + Eliminar etiquetas HTML e PHP de uma cadeia
  + Código de barras
  + Formatar decimais em PHP
  + Recolher o nome da URL em PHP
  + Obter dados de um form criado dinamicamente
  + Envio de e-mail dependendo do check
  + Variáveis $_SERVER em PHP
  + Agregar um hífen em uma variável varchar
  + [...]

Ver todas las FAQS de Programação / Tratamento de variável PHP

Usuários :    login / registro

Home | Sobre nós | Copyright | Anuncie | Entrar em contato