Jump to content


Photo

Alterar A Forma Da Data Para Enviar Para Bd.


  • Faça o login para participar
11 replies to this topic

#1 Nimaro

Nimaro

    Normal

  • Usuários
  • 71 posts
  • Sexo:Não informado

Posted 31/12/2009, 09:46

Ola a todos,

Tenho um sistema de mensagens que me armazena na BD as mensagens que os utilizadores escrevem.
Mas do que já me apercebi em MySql a data fica desta forma: "AAAA-MM-DD"
E no meu sistema utilizo um calendario .js, para o utilizador escolher 1 data mais facilmente.

O problema está que este calendario coloca a data desta forma: "DD-MM-AAAA". E eu posso tentar alterar o JS, mas não será facil porque tem varias dependencias.

O que gostava de vos perguntar era se nao dá para alterar a o formato da minha variavel que recebe a data para poder inserir na BD tranquilamente, ou seja, passar de "DD-MM-AAAA" para "AAAA-MM-DD", e so ai enviar para a BD.

Agradeço uma ajuda nisto, Obrigado!

#2 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 31/12/2009, 11:21

faça essa conversão no banco de dados mesmo !!!

ao incluir coloque a função date_format ou use uma função do PHP implode + explode + array_reverse => implode('-', array_reverse(explode('-', '02-10-2009')))

T+

E FELIZ ANO NOVO !!!
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#3 anderson farias

anderson farias

    Normal

  • Usuários
  • 62 posts
  • Sexo:Masculino
  • Localidade:Bahia
  • Interesses:Ajudar, trabalhar e viver...

Posted 31/12/2009, 11:51

Olá Nimaro ,

segue script abaixo.

abraços.

caso necessite modifique e comente.


//data vindo do form
$data = trim($_POST['data']);
if(strstr($data,"/"))
{
$vet = explode("/",$data);
$data_db = $vet[2]."-".$vet[1]."-".$vet[0];

}

$sql = "INSERT INTO datas VALUES('$data_db')";
$insere = mysql_query($sql);
if(mysql_affected_rows()>0)
{
echo "cadastrado";
}
else
{
echo " não cadastrado";
}


Edição feita por: anderson farias, 31/12/2009, 11:57.


#4 Nimaro

Nimaro

    Normal

  • Usuários
  • 71 posts
  • Sexo:Não informado

Posted 31/12/2009, 12:32

Estou agora a tentar fazer pela funcao date_format(), que ja estive a ler melhor, e do que li pareceu bem simples ^^

Mas estou a ter alguns problemas, penso eu de codigo :/

Vou colocar aqui tudo o que diz respeito ao codigo da data, para vos ajudar no rastriamento do problema, espero :)


Input Box da Data e respectiva chamado do .js do calendario

<tr><td>Data:</td>
                          [b][i]<td><input type="date" name="data_1" id="data_1" size="7" maxlength="10" value="<?php echo $data_curr;?>" /> </td></tr>            [/i][/b]
                          <script type="text/javascript">
                            $('#data_1').focus(function(){  
                                 $(this).calendario({  
                                     target :'#data_1',  
                                     dateDefault:$(this).val()  
                                 });  
                             }); 
                          </script> 


Despois para a inserção na BD tentei fazer desta forma:

$data_1= ($_POST['data_1']);
DATE_FORMAT('$data_1','%Y/%d/%m');


E da-me este erro:

Warning: date_format() expects parameter 1 to be DateTime, string given in C:\wamp\www\Secretel\insere_mensagens.php on line 86



Do que entendi o data_1 deveria de ser data e time ao mesmo tempo :/


Conseguem dar-me uma ajuda de como ultrapasso isto???

#5 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 31/12/2009, 13:03

DATA_FORMAT() se utiliza para transformar uma data que esteja no formato de datas do mysql para um formato qualquer.

Quando você quiser transformar uma data que estiver num formato qualquer para o formato de datas do mysql, você deve utilizar a função reversa. Essa função é a STR_TO_DATE().

Exemplo:

SELECT STR_TO_DATE('16/12/2009','%d/%m/%Y')

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#6 Nimaro

Nimaro

    Normal

  • Usuários
  • 71 posts
  • Sexo:Não informado

Posted 31/12/2009, 13:13

entao seria algo do genero :

STR_TO_DATE('$data_1','%Y/%m/%d'); ?????

E desta forma o valor de data_1 e convertido para o formato YYYY/mm/dd???

Espero nao ter dito grande disparate...

#7 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 31/12/2009, 13:18

STR_TO_DATE('$data_1','%Y/%m/%d'); ?????

Se $data_1 estiver no formato YYYY/MM/DD, está correto. ;)

No segundo parâmetro deve-se informar o formato atual da data, lembre-se que STR_TO_DATE() é a função reversa da função DATE_FORMAT.

E desta forma o valor de data_1 e convertido para o formato YYYY/mm/dd???

É convertido sempre para o formato padrão do mysql. Então será convertido para YYYY-MM-DD.

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#8 Nimaro

Nimaro

    Normal

  • Usuários
  • 71 posts
  • Sexo:Não informado

Posted 04/01/2010, 11:23

depois de tanta coisa acabei por fazer desta forma:

$data_1= ($_POST['data_1']);
				$data_imasters   = ($_POST['data_1']);
				$data_imasters   = explode("/","$data_1");
				
				$data_imasters   = "$data_1[6]$data_1[7]$data_1[8]$data_1[9]-$data_1[3]$data_1[4]-$data_1[0]$data_1[1]";

Obrigado pela ajuda,
Abraços

#9 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 04/01/2010, 12:45

Por quê você explodiu $data_1 se depois você não faz nada com o array retornado?

Eu notei que $data_1 está no formato brasileiro (DD/MM/YYYY), nesse caso você deve usar STR_TO_DATE() assim:

STR_TO_DATE('$data_1','%d/%m/%Y');

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#10 Nimaro

Nimaro

    Normal

  • Usuários
  • 71 posts
  • Sexo:Não informado

Posted 04/01/2010, 12:50

Esqueci de colocar o resto do codigo, mas depois de explodir o $data_1, troco-lhe as variaveis todas e volto a enviar para o $data_1: assim deste genero:

$data_1= ($_POST['data_1']);
$data_im   = ($_POST['data_1']);
$data_im   = explode("/","$data_1");
				
$data_im   = "$data_1[6]$data_1[7]$data_1[8]$data_1[9]-$data_1[3]$data_1[4]-$data_1[0]$data_1[1]";

$data_1= $data_im;


#11 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 04/01/2010, 17:35

Ainda não entendi porque ainda não utilizou a função STR_TO_DATE() do MySQL, visto que é a melhor solução existente. Ainda que isto não fosse possível de se fazer no MySQL, utilizar explode() no PHP é o pior e mais complexo método possível para se fazer isto. :huh:

[]’s Até mais

#12 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 04/01/2010, 19:55

utilizar explode() no PHP é o pior e mais complexo método possível para se fazer isto.

Alí no código o explode() não está servindo para nada. O array retornado por ele é atribuido ao $data_im. Mas logo depois $data_im é sobreescrito com partes da string $data_1. :assobio:

Utilizando PHP, eu vejo a função sscanf() como a melhor solução. Poderia até validar a data depois com checkdate().

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq