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
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