Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
É o seguinte...
Tenho um formulario e nele tenho um campo de texto na qual o usuario deve digitar a data da seguinte maneira: DD/MM/AAAA.
Sendo assim, quando ele da SUBMIT e a outra pagina vai verificar os dados e salvar no banco, eu faço o seguinte com a data:
$PRIMEIRO = explode("/",$_POST['data']);
$DIA = $PRIMEIRO[0];
$MES = $PRIMEIRO[1];
$ANO = $PRIMEIRO[2];
$var_data = $ANO.'-'.$MES.'-'.$DIA;
Porem, quando tento salvar a variavel $var_data com a data no banco de dados cujo campo é um campo DATE (Mysql) ele salva zerado.
Alguem sabe o motivo?
Eu coloquei um echo depois da variavel e a data está correta, no padrao que o banco salva.
>
A melhor maneira de converter uma data, é com a biblioteca date/time.
$date = DateTime::createFromFormat('d/m/Y' , $_POST['data']);
echo $date->format('Y-m-d');
Imprima a query insert e veja como está ficando a data. Os valores ficam zerados apenas quando a data é inválida.
Então eu dou um ECHO na variavel $var_data e ela esta assim 2016-05-05 ou seja no padrao que o banco aceita.
Ola amigo, eu tenho essa funçãozinha que me ajuda:
function gravaData ($rData) {
if ($rData != '') {
return (substr($rData,6,4).'-'.substr($rData,3,2).'-'.substr($rData,0,2));
}else {
return '';
}
}
dai ele grava no banco correto, e na hora de exibir, eu uso esta:
function formataData ($data) {
if ($data!='') {
return (substr($data,8,2).'/'.substr($data,5,2).'/'.substr($data,0,4));
}
else { return ''; }
}
espero que sirva para alguma coisa.Esquecendo um pouco do PHP, uma opção é tratar direto no sql do INSERT
Não sei qual sua camada do banco.
Mas faz de conta que é mysqli e esta rolando o INSERT tradicional como o exemplo abaixo:
INSERT INTO pessoa (dt_nacimento) VALUES (STR_TO_DATE('2016-05-05', '%Y/%m/%d'))
O seu problema pode estar ocorrendo pela 'set' do servidor.
Então eu dou um ECHO na variavel $var_data e ela esta assim 2016-05-05 ou seja no padrao que o banco aceita.
De um echo na query de insert, não na variável $var_data. Você precisa ver se a query, como um todo, está bem formatada.
Você também pode tentar:
INSERT INTO datas SET data_nascimento = STR_TO_DATE('06/05/2016','%d/%m/%Y');
Formato inserido:
2016-05-06
Consegui usando essa funcao
$var_dia=$_POST['dia'];
$var_mes=$_POST['mes'];
$var_ano=$_POST['ano'];
$var_dataEventoN = $var_ano.'-'.$var_mes.'-'.$var_dia;
$var_dataEvento = date('Y-m-d', strtotime($var_dataEventoN));Você realizou várias curvas para chegar em um resultado que poderia ser conseguido com poucas linhas (ou seja, de forma direta).
A melhor maneira de converter uma data, é com a biblioteca date/time.
Imprima a query insert e veja como está ficando a data. Os valores ficam zerados apenas quando a data é inválida.