Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
olá, gostaria de saber se tem alguma função que converte as datas do meu banco de dados para outro formato. pois esse banco é antigo e eu fazia as datas no campo varchar e não imaginava que hoje eu precisaria usar esse campo para determinar alguma coisa. agora preciso..
o nome do meu campo é data e está como varchar(20) está armazenando as datas dessa forma 13/03/2014
preciso saber de alguma função que converte para o formato date 2014-03-13 depois eu tratar isso para fazer uma where mais para frente
eu poderia mudar o tipo dele. mais tem mais de 5 mil cadastro nessa tabela e mudar uma por uma vai demorar...
agradeço desde já...
A primeira coisa é começar a armazenar a data como data (date), e não como varchar.
Alter table não muda registro por registro. Ele muda tudo de uma vez se o casting for passível no valor da coluna.
Para evitar o pior, faça dois dump's - um somente com a estrutura, e outro somente com os dados.
Faça o alter table, e importe o arquivo que contém somente os dados. 5 mil registros para um banco de dados não faz nem cócegas.
Depois, a forma que você vai usar para transformar a apresentação dos dados fica praticamente infinita, além de você poder usufruir no próprio banco de dados todas as vantagens que existem em se guardar o valor na coluna com o tipo de dados correto. Não adianta querer guardar cerveja no forno microondas ligado e esperar que ela fique gelada :coolio:
Ai você pode fazer no PHP:
http://br2.php.net/datetime <-- minha preferida quando tenho que fazer no PHP
No banco de dados (MySQL)
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
[]'s
[...] preciso saber de alguma função que converte para o formato date 2014-03-13 [...]
echo date('Y-m-d', strtotime('13/03/2014'));
olá,
essa de guardar cerveja no forno microondas ligado e esperar que ela fique gelada foi foda... heheheeehe e realmente eu fazia isso mesmo com muita presa e rapidez para entrar os trabalhos e fazia de qualquer jeito, mais agora faço de forma diferente para evitar esses tipo de coisas...
mais valeu pela dica e estarei olhando os links que tu passo. valeu mesmo...
beleza
>
echo date('Y-m-d', strtotime('13/03/2014'));
Evandro, se tivesse ao menos testado o teu próprio código, teria visto que a saída é 1969-12-31. Ou seja, totalmente errada.
O problema é que quando o formato "XX/XX/XXXX" é inserido, o PHP o interpreta de acordo com o padrão em inglês, que corresponde a MM/DD/YYYY e não DD/MM/YYYY que usamos aqui no Brasil.
E isso vale para qualquer função ou método que interprete datas no PHP, pois não tem como eles seguirem os dois padrões.
Para passar uma data no formato DD/MM/YYYY para YYYY-MM-DD (MySQL) é só fazer o seguinte:
<?php
echo implode( '-', array_reverse( explode( '/', '13/03/2014' ) ) );
// Saída: 2014-03-13
$date = DateTime::parseFromFormat('d/m/Y','13/03/2014');
echo $date->format('Y-m-d');>
Evandro, se tivesse ao menos testado o teu próprio código, teria visto que a saída é 1969-12-31. Ou seja, totalmente errada.
O problema é que quando o formato "XX/XX/XXXX" é inserido, o PHP o interpreta de acordo com o padrão em inglês, que corresponde a MM/DD/YYYY e não DD/MM/YYYY que usamos aqui no Brasil.
E isso vale para qualquer função ou método que interprete datas no PHP, pois não tem como eles seguirem os dois padrões.
Para passar uma data no formato DD/MM/YYYY para YYYY-MM-DD (MySQL) é só fazer o seguinte:
<?php
echo implode( '-', array_reverse( explode( '/', '13/03/2014' ) ) );
// Saída: 2014-03-13
Boa observação. Não ando testando as sugestões tudo de cabeça...
Testa essa pra mim?
echo date('Y-m-d', strtotime(str_replace('/', '.', '13/03/2014')));
A melhor solução, tendo disponível a lib DateTime, é a que o hufersil postou. Não costumo postar muitas coisas com ela, pois ainda poucos servidores compartilhados dispõem o PHP >= 5.3.0.
>
$date = DateTime::parseFromFormat('d/m/Y','13/03/2014');
echo $date->format('Y-m-d');
Nao seria Datetime::createFromFormat?
Bom pessoal! consegui resolver meu problema.. criei um campo do tipo date no banco de dados e com a ajuda de um amigo criamos esse script em php para converter toda o campo que contia mais de 5 mil registro do tipo text 00/00/0000 para o tipo date do mysql 0000-00-00.
quero agradecer a todos que me ajudaram. valeu mesmo..
Um detalhe um tanto irrelevante,
muitos referem-se ao formato YYYY/MM/DD como sendo um formato em inglês, o que não é verdade.
Esse formato é o padrãoISO 8601
criamos esse script em php para converter toda o campo que contia mais de 5 mil registro do tipo text 00/00/0000 para o tipo date do mysql 0000-00-00.
não havia necessidade em parsear tudo no PHP para regravar no banco..
bastava fazer um REPLACE diretamente no SQL sem necessidade de uso de PHP ou quaisquer outras linguagens..
mas.. bom que resolveu..
então, tentei fazer no MySQL mais como não manjo muito em mexer lá ainda. (estou estudando MySQL) e no php eu consegui.
estou postando o código aqui pois ontem eu tava em casa e nao tinha como...
include"config.php";
//Consulta todos os produtos
$sql_Consulta = 'select * from produtos ';
$query = mysql_query($sql_Consulta);
//Percorre produto por produto;
while($row = mysql_fetch_array($query)):
$data = $row['dataSolicitada'];
$id = $row['id'];
//Verifica se data não esta vazia
if(!empty($data)):
//Formata a data no padrão DATE do Mysql
$alterar = implode('-',array_reverse(explode('/',$data)));
//Insere a data correta no campo data_emissao
$update = "update produtos set data_solicitada = '".$alterar."' where id = ".$id;
//echo $update;
$insert = mysql_query($update,$db);
//echo mysql_affected_rows($insert);
endif;
endwhile;SASINHORA
será que o cara (#15) ao menos lê algum post?
Esse site que ele posta em todos os tópicos é dele. Ele está querendo promover o site dele. Eu consideraria isso como spam e o baniria.
Um jeito fácil é utilizar 3 funcões: explode(), array_reverse() e implode(). Agora é com você.