Ir para conteúdo

POWERED BY:

Arquivado

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

LEO8789

[Resolvido] data formato brasileiro

Recommended Posts

Sei que ja existem muitos topicos sobre isso mas ate agora nenhum ajudou

o que eu gostaria de fazer é num campo input inserir uma data em formato brasileiro no mysql

atraves de php dd/mm/yyyy, sei como fazer ela aparecer no formato brasileiro na hora de listar

meu problema é trocar o formato de data do brasileiro para o americano na hora de inserir no bd

Compartilhar este post


Link para o post
Compartilhar em outros sites

function data2iso($str)
	{
		$data = explode("/",$str);
		return $data[2] . "-" . $data[1] . "-" . $data[0];
	}

dai é só na hora de inserir você utilizar

 

$dataparabd = data2iso($inputdata);

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize essas duas funções...

 

function DataDB2BR($datapega)
				 {
				   $data = explode('-',$datapega);
				   $datacerta = $data[2].'/'.$data[1].'/'.$data[0];
				   return $datacerta;
				 }
		function DataBR2DB($datapega)
				 {
				   $data = explode('/',$datapega);
				   $datacerta = $data[2].'-'.$data[1].'-'.$data[0];
				   return $datacerta;
				 }

modo de usar (exemplo):

echo DataDB2BR($data);

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

function data2iso($str)
	{
		$data = explode("/",$str);
		return $data[2] . "-" . $data[1] . "-" . $data[0];
	}

dai é só na hora de inserir você utilizar

 

$dataparabd = data2iso($inputdata);

INSERT INTO tabela (data) VALUES ('$dataparabd');

é isso nao é?

tentei mas nao deu certo ate insere a data mas uma que nao tem nada ver tipo 11/12/1999

volto a repetir preciso que quando digite uma data assim 10/12/2009

insira assim no bd 2009/12/10

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acredito que o banco só trabalhe com datas recebidas no formato EN com traço "-" e nao com barra, e que seja possivel só mostrar (select) em formato personalizado

 

Mas porque colocar a data nesse formato no banco?

você vai visualizar os registros sempre por lá?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu também estava atrás disso, achei várias alternativas (algumas para diferentes versões de php), e acabei adaptando 1 de uma maneira que talvez não seja a mais prática, ou mais didática, mas foi a que eu achei mais fácil de entender

 

Primeiro. Tem o campo input. Eu usei uma função que peguei na net para máscara de CPF e adaptei para campos data. Não lembro o site que peguei, por isso não vou colocar os créditos, mas o campo input fica assim:

 

<input name='data_venc' type='text' id='data_venc' onkeypress='mascara(this,tipodata)' size='10' maxlength='10'>
coloquei maxlenght = 10 para que o usuário não digite mais que 10 "digitos". Nesse caso, ele não precisará digitar as '/' pois a máscara coloca automaticamente. Como a dúvida não é sobre a máscara, não vou explicar a função em JavaScript. Basta colocar o trecho de código abaixo na área <head> de seu documento.

 

<script>
function mascara(o,f){
	v_obj=o
	v_fun=f
	setTimeout("execmascara()",1)
}
function execmascara(){
	v_obj.value=v_fun(v_obj.value)
}
function leech(v){
	v=v.replace(/o/gi,"0")
	v=v.replace(/i/gi,"1")
	v=v.replace(/z/gi,"2")
	v=v.replace(/e/gi,"3")
	v=v.replace(/a/gi,"4")
	v=v.replace(/s/gi,"5")
	v=v.replace(/t/gi,"7")
	return v
}
function tipodata(v){
	v=v.replace(/\D/g,"")					//Remove tudo o que não é dígito
	v=v.replace(/(\d{2})(\d)/,"$1/$2")	   //Coloca uma barra entre o segundo e o terceiro dígito
	v=v.replace(/(\d{2})(\d)/,"$1/$2")	   //Coloca uma barra entre o quarto e o quinto dígito

	return v
}
</script>

Bom, com a data informada corretamente, vamos à parte da gravação na base de dados.

 

Como você já falou, um campo criado no MYSQL como tipo DATE, é armazenado na base de dados sempre no formato YYYY-MM-DD. Então precisamos transformar essa data informada ANTES de gravar.

 

Bom. Eu trabalho com um arquivo para o formulário, e na definição do formulário, eu informo o nome do arquivo que irá gravar efetivamente os dados, e fazer uma validação dos dados antes de gravá-los. Ex.: <form action=grava.php>.

 

É nesse arquivo grava.php, que iremos transformar a data informada pelo usuário. Para isso utilizaremos a função abaixo, que simplesmente "fatia" a data informada pelo usuário, usando como referência o caracter '/'. A máscara acima é util, pois em alguns casos, alguns usuários poderiam informar a data usando outros delimitadores, como 17-10-1972 ou 18.09.1981, e nesse caso a conversão não funcionaria. Então é melhor garantir do que remediar :) Após fatiar, temos um array com as 3 informações necessárias (dia, mês e ano). Para um melhor entendimento, criei uma variável para cada uma delas. Em seguida, essas variáveis são concatenadas novamente, usando o caracter '-' como separador e na ordem que o MySQL necessita.

 

 

/*/////////////////////////////////////////////
/// FUNCAO PARA CONVERTER DATA PARA O MYSQL ///
/////////////////////////////////////////////*/
function converter_data($dat){
	// Recebemos a data no formato: dd/mm/aaaa
	// Convertemos a data para o formato: aaaa-mm-dd
	$data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência
	$d = $data[0];
	$m = $data[1];
	$y = $data[2];
	
	return $y.'-'.$m.'-'.$d;
}

Antes de gravar o campo na base de dados, basta chamar essa função, passando a data que o usuário informou como parâmetro:

 

$venc = converter_data($data_venc);			  // Converte a data BR para o formato MySQL

Nesse caso, a variável $venc já está transformada para o formato exigido pelo MySQL.

 

Mas o script ainda pode não funcionar direito, pois o usuário ainda pode digitar alguma coisa que não seja uma data válida no campo input, como por exemplo 66-58-1987. Nesse caso, seria indicado fazer uma Verificação se essa informação é uma data válida. Para isso, tem outra funçãozinha básica, também em PhP. Basta usar a função checkdate() do php, mas para isso temos que fatiar a string novamente.

 

/*//////////////////////////////
/// FUNCAO PARA VALIDAR DATA ///
//////////////////////////////*/
function ValidaData($dat){
	$data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência
	$d = $data[0];
	$m = $data[1];
	$y = $data[2];
	// verifica se a data é válida!
	// 1 = true (válida)
	// 0 = false (inválida)
	$res = checkdate($m,$d,$y);
	if ($res == 1){
	   return 1;
	} else {
	   return 0;
	}
}

O resultado final ficaria mais ou menos assim:

 

<?php 

// comandos para a conexão com a base de dados
require("conectar.php");

// Recupera os dados informados pelo usuário no formulário
$data_venc=$_REQUEST["data_venc"];

/*/////////////////////////////////////////////
/// FUNCAO PARA CONVERTER DATA PARA O MYSQL ///
/////////////////////////////////////////////*/
function converter_data($dat){
	// Recebemos a data no formato: dd/mm/aaaa
	// Convertemos a data para o formato: aaaa-mm-dd
	$data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência
	$d = $data[0];
	$m = $data[1];
	$y = $data[2];
	
	return $y.'-'.$m.'-'.$d;
}

/*//////////////////////////////
/// FUNCAO PARA VALIDAR DATA ///
//////////////////////////////*/
function ValidaData($dat){
	$data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência
	$d = $data[0];
	$m = $data[1];
	$y = $data[2];
	// verifica se a data é válida!
	// 1 = true (válida)
	// 0 = false (inválida)
	$res = checkdate($m,$d,$y);
	if ($res == 1){
	   return 1;
	} else {
	   return 0;
	}
}

if (ValidaData($data_venc))   // Verifica se é uma data válida, 
   {
	$venc = converter_data($data_venc); // Converte a data BR para o formato MySQL
	$sql="insert into PRODUTOS values (NULL, '$venc')";
	$comando=mysql_query ($sql);
	if (!$comando) {echo "Erro!<br><br>O Produto <b>NÃO</b> foi Incluído";}
	  else {echo "Ok!<br><br>O Produto foi Incluídocom sucesso";}
   }
else { echo "Data de Vencimento Inválida<br> Por favor informe uma data correta!";}

mysql_close($conexao);

?>

Para mostrar uma data do formato MySQL no php, basta usar a função de converter_data no sentido inverso ;)

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu também estava atrás disso, achei várias alternativas (algumas para diferentes versões de php), e acabei adaptando 1 de uma maneira que talvez não seja a mais prática, ou mais didática, mas foi a que eu achei mais fácil de entender

 

Primeiro. Tem o campo input. Eu usei uma função que peguei na net para máscara de CPF e adaptei para campos data. Não lembro o site que peguei, por isso não vou colocar os créditos, mas o campo input fica assim:

 

<input name='data_venc' type='text' id='data_venc' onkeypress='mascara(this,tipodata)' size='10' maxlength='10'>
coloquei maxlenght = 10 para que o usuário não digite mais que 10 "digitos". Nesse caso, ele não precisará digitar as '/' pois a máscara coloca automaticamente. Como a dúvida não é sobre a máscara, não vou explicar a função em JavaScript. Basta colocar o trecho de código abaixo na área <head> de seu documento.

 

<script>
function mascara(o,f){
	v_obj=o
	v_fun=f
	setTimeout("execmascara()",1)
}
function execmascara(){
	v_obj.value=v_fun(v_obj.value)
}
function leech(v){
	v=v.replace(/o/gi,"0")
	v=v.replace(/i/gi,"1")
	v=v.replace(/z/gi,"2")
	v=v.replace(/e/gi,"3")
	v=v.replace(/a/gi,"4")
	v=v.replace(/s/gi,"5")
	v=v.replace(/t/gi,"7")
	return v
}
function tipodata(v){
	v=v.replace(/\D/g,"")					//Remove tudo o que não é dígito
	v=v.replace(/(\d{2})(\d)/,"$1/$2")	   //Coloca uma barra entre o segundo e o terceiro dígito
	v=v.replace(/(\d{2})(\d)/,"$1/$2")	   //Coloca uma barra entre o quarto e o quinto dígito

	return v
}
</script>

Bom, com a data informada corretamente, vamos à parte da gravação na base de dados.

 

Como você já falou, um campo criado no MYSQL como tipo DATE, é armazenado na base de dados sempre no formato YYYY-MM-DD. Então precisamos transformar essa data informada ANTES de gravar.

 

Bom. Eu trabalho com um arquivo para o formulário, e na definição do formulário, eu informo o nome do arquivo que irá gravar efetivamente os dados, e fazer uma validação dos dados antes de gravá-los. Ex.: <form action=grava.php>.

 

É nesse arquivo grava.php, que iremos transformar a data informada pelo usuário. Para isso utilizaremos a função abaixo, que simplesmente "fatia" a data informada pelo usuário, usando como referência o caracter '/'. A máscara acima é util, pois em alguns casos, alguns usuários poderiam informar a data usando outros delimitadores, como 17-10-1972 ou 18.09.1981, e nesse caso a conversão não funcionaria. Então é melhor garantir do que remediar :) Após fatiar, temos um array com as 3 informações necessárias (dia, mês e ano). Para um melhor entendimento, criei uma variável para cada uma delas. Em seguida, essas variáveis são concatenadas novamente, usando o caracter '-' como separador e na ordem que o MySQL necessita.

 

 

/*/////////////////////////////////////////////
/// FUNCAO PARA CONVERTER DATA PARA O MYSQL ///
/////////////////////////////////////////////*/
function converter_data($dat){
	// Recebemos a data no formato: dd/mm/aaaa
	// Convertemos a data para o formato: aaaa-mm-dd
	$data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência
	$d = $data[0];
	$m = $data[1];
	$y = $data[2];
	
	return $y.'-'.$m.'-'.$d;
}

Antes de gravar o campo na base de dados, basta chamar essa função, passando a data que o usuário informou como parâmetro:

 

$venc = converter_data($data_venc);			  // Converte a data BR para o formato MySQL

Nesse caso, a variável $venc já está transformada para o formato exigido pelo MySQL.

 

Mas o script ainda pode não funcionar direito, pois o usuário ainda pode digitar alguma coisa que não seja uma data válida no campo input, como por exemplo 66-58-1987. Nesse caso, seria indicado fazer uma Verificação se essa informação é uma data válida. Para isso, tem outra funçãozinha básica, também em PhP. Basta usar a função checkdate() do php, mas para isso temos que fatiar a string novamente.

 

/*//////////////////////////////
/// FUNCAO PARA VALIDAR DATA ///
//////////////////////////////*/
function ValidaData($dat){
	$data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência
	$d = $data[0];
	$m = $data[1];
	$y = $data[2];
	// verifica se a data é válida!
	// 1 = true (válida)
	// 0 = false (inválida)
	$res = checkdate($m,$d,$y);
	if ($res == 1){
	   return 1;
	} else {
	   return 0;
	}
}

O resultado final ficaria mais ou menos assim:

 

<?php 

// comandos para a conexão com a base de dados
require("conectar.php");

// Recupera os dados informados pelo usuário no formulário
$data_venc=$_REQUEST["data_venc"];

/*/////////////////////////////////////////////
/// FUNCAO PARA CONVERTER DATA PARA O MYSQL ///
/////////////////////////////////////////////*/
function converter_data($dat){
	// Recebemos a data no formato: dd/mm/aaaa
	// Convertemos a data para o formato: aaaa-mm-dd
	$data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência
	$d = $data[0];
	$m = $data[1];
	$y = $data[2];
	
	return $y.'-'.$m.'-'.$d;
}

/*//////////////////////////////
/// FUNCAO PARA VALIDAR DATA ///
//////////////////////////////*/
function ValidaData($dat){
	$data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência
	$d = $data[0];
	$m = $data[1];
	$y = $data[2];
	// verifica se a data é válida!
	// 1 = true (válida)
	// 0 = false (inválida)
	$res = checkdate($m,$d,$y);
	if ($res == 1){
	   return 1;
	} else {
	   return 0;
	}
}

if (ValidaData($data_venc))   // Verifica se é uma data válida, 
   {
	$venc = converter_data($data_venc); // Converte a data BR para o formato MySQL
	$sql="insert into PRODUTOS values (NULL, '$venc')";
	$comando=mysql_query ($sql);
	if (!$comando) {echo "Erro!<br><br>O Produto <b>NÃO</b> foi Incluído";}
	  else {echo "Ok!<br><br>O Produto foi Incluídocom sucesso";}
   }
else { echo "Data de Vencimento Inválida<br> Por favor informe uma data correta!";}

mysql_close($conexao);

?>

Para mostrar uma data do formato MySQL no php, basta usar a função de converter_data no sentido inverso ;)

 

Espero ter ajudado.

Vlw cara!!!

Ajudou com o código de conversão e ainda com a validação da data!

Muito bom, excelente resposta!!!

RESOLVIDO!

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.