Ir para conteúdo

POWERED BY:

Arquivado

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

lusigmas

[Resolvido] Datas em formulário de busca no padrão brasileiro?

Recommended Posts

Olá Pessoal! É a primeira vez em anos que posto uma dúvida pois geralmente encontro as soluções que preciso aqui, mas dessa vez já pesquisei muito inclusive lendo os manuais e não encontrei a resposta. Preciso de uma força:

 

Questão:

Tenho um formulário de busca que lista registros entre duas datas, que funciona se eu digitar a data em formato padrão Mysql = aaaa-mm-dd, porém eu preciso que o usuário digite a data em formato brasileiro dd/mm/aaaa. Como fazer?

 

formulário:

-------------

<form name="form1" method="post" action="relat_agenda.php">
<table width="680" border="0" align="center" cellpadding="0" cellspacing="0" class="gen">
<tr> 
<td height="30" colspan="3" class="gentextoform"> <div align="center">Digite 
o período desejado:</div></td>
</tr>
<tr class="gentextoform"> 
<td width="319" height="47">
<div align="right">de 
<input name="data1" type="text" id="data1" size="10" maxlength="10">
</div></td>
<td width="41"><div align="center">até</div></td>
<td width="320"><div align="left"> 
<input name="data2" type="text" id="data2" size="10" maxlength="10">
</div></td>
</tr>
<tr class="gentextoform"> 
<td colspan="3"><div align="center"> 
<input type="submit" name="Submit" value="Enviar">
</div></td>
</tr>
</table>
</form>

-----------

consulta:

 

$data1 = $_POST['data1'];
$data2 = $_POST['data2'];
$consulta = mysql_query("SELECT * FROM cadastro WHERE hist_data1 BETWEEN '$data1' AND '$data2'"); 

-----------

 

Agradeço se puderem me auxiliar.

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha pode manter a data no formato americano no banco, usando 0000-00-00

 

e efetuar a busca neste formato 00/00/0000

 

você só tem que converter a data no servidor

 

vou postar dois exemplos praticos de se fazer isso entre muitos

 

1º exemplo usando array_reverse

 

$data1 = implode('-',array_reverse(explode('/',$_POST['data1'])));

2º exemplo usando strtotime e no meu ver a mais simples

 

$date1 = date('Y-m-d', strtotime($_POST['data1']));

Ve se te ajuda as dicas!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá PHP Programmer!

Obrigada pelo apoio.

Preciso de mais detalhes, pois não consegui fazer funcionar...

Darei um exemplo:

 

No formulário, se digito datas: de 2010-03-01 até 2010-03-15 consigo o resultado que desejo.

Mas se eu digitar em formato brasileiro: de 01/03/2010 até 15/03/2010 o resultado é uma página em branco.

Penso que o problema está no formulário, pois o resultado da busca vem no formato que desejo.

 

Se as instruções que sugeriu devem ser inseridas no formulário, onde devo coloca-las?

 

Desde já agradeço a paciência, hehe.

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu ja converto a data no cadastro:

 

$data = date("Y-m-d"); // Essa parte do código determina o formato da data
$hora = date("H:i:s"); // Aqui é determinado o formato da hora
$novadata = substr($data,8,2) . "/" .substr($data,5,2) . "/" . substr($data,0,4);// Essa variável recebe a data atual que será mostrada entre barras
$novahora = substr($hora,0,2) . "h" .substr($hora,3,2) . "min";// Essa variável recebe a nova hora que será mostrada com as configurações de horas e minutos

acho mais facil na hora de fazer uma busca

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @lusigmas

 

Você pode efetuar a busca neste formato no formulário 02/04/2010

 

Ae o servidor ira converter a data automaticamente para o formato americano, não há a necessidade d utilizar formato brasileiro no banco de dados, pois já existe no mysql opção de campo de ser do tipo date

 

fiz das duas maneiras do código abaixo, utilize a qual achar mas conviniente.

 

$data1 = date('Y-m-d', strtotime($_POST['data1']));
$data2 = implode('-',array_reverse(explode('/',$_POST['data2'])));
$consulta = mysql_query("SELECT * FROM cadastro WHERE hist_data1 BETWEEN '$data1' AND '$data2'");

 

@Bruno Conte

Não vejo utilidade nisso, pois os bancos possuem campos para esses fins, como date, datetime e timestamp.

e um simples NOW() já armazena a data do cadastro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

WDuarte, a função strtotime() interpreta datas no padrão americano (mm/dd/yyyy). Ela não pode ser utilizada com datas no padrão brasileiro (dd/mm/yyyy) pois o dia e o mês são estão em posições diferentes.

Para confirmar isso, veja este exemplo:

 

<?php
$teste1 = mktime( 0, 0, 0, 4, 2, 2010 ); // mktime() com a data 02 de Abril de 2010
$teste2 = strtotime( '02/04/2010' );

if ( $teste1 == $teste2 ) {
	echo 'A função strtotime() aceita o padrão brasileiro.';
} else {
	echo 'A função strtotime() não aceita o padrão brasileiro.';
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@André D. Molin

 

Verdade errei, faltou uma função para efetuar a busca

 

$date1 = date('Y-m-d', strtotime(str_replace("/", "-", $_POST['data1'] )));

porém o que ela quer é formatar uma string e não comparar um timestamp.

 

ps.: Dá um desconto hoje é feriado! rsssssssss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha pode manter a data no formato americano no banco, usando 0000-00-00

 

e efetuar a busca neste formato 00/00/0000

 

você só tem que converter a data no servidor

 

vou postar dois exemplos praticos de se fazer isso entre muitos

 

1º exemplo usando array_reverse

 

$data1 = implode('-',array_reverse(explode('/',$_POST['data1'])));

2º exemplo usando strtotime e no meu ver a mais simples

 

$date1 = date('Y-m-d', strtotime($_POST['data1']));

Ve se te ajuda as dicas!

 

 

 

 

Pra mim resolveu, estava com esse problema. Muito obrigado!!!

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.