Alterar A Forma Da Data Para Enviar Para Bd.
#1
Posted 31/12/2009, 09:46
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
Posted 31/12/2009, 11:21
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
Posted 31/12/2009, 11:51
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
Posted 31/12/2009, 12:32
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
Posted 31/12/2009, 13:03
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')
- Paulo Freitas likes this
Muller Dias
ex-administrador Fórum WMO
#6
Posted 31/12/2009, 13:13
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
Posted 31/12/2009, 13:18
Se $data_1 estiver no formato YYYY/MM/DD, está correto.STR_TO_DATE('$data_1','%Y/%m/%d'); ?????
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.
É convertido sempre para o formato padrão do mysql. Então será convertido para YYYY-MM-DD.E desta forma o valor de data_1 e convertido para o formato YYYY/mm/dd???
Muller Dias
ex-administrador Fórum WMO
#8
Posted 04/01/2010, 11:23
$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
Posted 04/01/2010, 12:45
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');
Muller Dias
ex-administrador Fórum WMO
#10
Posted 04/01/2010, 12:50
$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
Posted 04/01/2010, 17:35
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. []’s Até mais
#12
Posted 04/01/2010, 19:55
Alí no código outilizar
explode()
no PHP é o pior e mais complexo método possível para se fazer isto.
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. Utilizando PHP, eu vejo a função sscanf() como a melhor solução. Poderia até validar a data depois com checkdate().
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)