Ir para conteúdo

POWERED BY:

Arquivado

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

Nimaro

[Resolvido] Alterar a forma da Data para enviar para BD.

Recommended Posts

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se no MYSQL funciona essa função, mas no SQLServer funciona.

INSERT INTO TABELA(DATA) VALUES (CONVERT(DATETIME,'2009-12-01',103))

Compartilhar este post


Link para o post
Compartilhar em outros sites

passar de "DD-MM-AAAA" para "AAAA-MM-DD", e so ai enviar para a BD.

 

/**
* Converte uma data entre dois formatos
* @param string $dt A data que será convertida
* @param string $fin O formato original
* @param string $fout O formato final
* @return string
*/
function &date_convert( $dt , $fin = '%d-%m-%Y' , $fout = '%Y-%m-%d' ){
$dp = strptime( $dt , $fin );
$do = strftime( $fout , mktime(
	$dp[ 'tm_hour' ],
	$dp[ 'tm_min' ],
	$dp[ 'tm_sec' ],
	$dp[ 'tm_mon' ] + 1,
	$dp[ 'tm_mday' ],
	$dp[ 'tm_year' ] + 1900
) );

return $do;
}

 

Utilize a função acima para isso:

echo date_convert( '31-12-2009' );

 

A saída será: 2009-31-12

 

Se a data de entrada estiver em um formato diferente, basta especificá-lo:

echo date_convert( '31/12/2009' , '%d/%m/%Y' );

 

Veja o manual da função strftime para saber quais são os formatos para a entrada e para a saída: http://br.php.net/manual/en/function.strftime.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmmm...

Eu tenho desta forma:

 

$data_1= ($_POST['data_1']); <--------- Recebe a data
query = "INSERT INTO mensagens (id_medico, id_paciente, id_utilizador, mensagem, data, hora, assunto) VALUES ('$id_medico', '$id_pacient', '$id_utilizador', '$mensagem', '$data_1', '$hora', '$assunto')";

E dizes para colocar algo como isto? :/

query = "INSERT INTO mensagens (id_medico, id_paciente, id_utilizador, mensagem, data, hora, assunto) VALUES ('$id_medico', '$id_pacient', '$id_utilizador', '$mensagem', CONVERT('$data_1','2009-12-01',103), '$hora', '$assunto')";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao, assim:

CONVERT(datetime, '$data_1',103)

É a variável que você quer no Convert.

Mas não sei se vai funcionar por ser MYSQL, você vai ter que usar o Date_Format() como o outro User disse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem... João Batista Neto, estou a tentar fazer pelo teu sistema, porque me parece simples e funcional.

Mas tentei implementar no meu projecto e ele da-me 1 erro na função "strptime( $dt , $fin );"

 

Erro:

Fatal error: Call to undefined function strptime() in C:\wamp\www\Secretel\insere_mensagens.php on line 78

Consegues ajudar no motivo deste erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma facil e simples de fazer isso é com o explode

 

Faz o seguinte, vou usar uma variavel chama $data_imasters para enviar para o banco e voce usa a sua.

 

$data_imasters   = $_GET["data_imasters"];
$data_imasters   = explode("/","$data_imasters");
$data_imasters	 = "$data_imasters[2]-$data_imasters[1]-$data_imasters[0]";

 

É claro qeu voce vai colocar isso em seu arquivo onde vai enviar para o banco.

Uso isso nas minhas datas e funcionam de boa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

funcionou mesmo :),

 

Mas teve de ser algo deste genero:

 

$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 mais 1 vez ;)

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.