Ir para conteúdo

POWERED BY:

Arquivado

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

reinaldorti

data

Recommended Posts

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á...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

http://br2.php.net/mktime

http://br2.php.net/strotime

http://br2.php.net/date

http://br2.php.net/explode

http://br2.php.net/reverse

http://br2.php.net/implode

 

No banco de dados (MySQL)

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

[...] preciso saber de alguma função que converte para o formato date 2014-03-13 [...]

 

echo date('Y-m-d', strtotime('13/03/2014'));

 

http://php.net/date

http://php.net/strtotime

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá,

  • André D. Molin
  • estarei vitrificação essas funções. valeu..


  • então, hufersil! eu antigamente guardava desta forma os dados, armazenava tudo em varchar e text. hoje eu faço do modo correto.
  • essa tabela é de um cliente antigo que fiz nos meus primeiros trabalhos somente agora ele pediu uma atualização que usa justo esse campo da tabela...

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

  • Evandro Oliveira

tu como sempre ajudando viu.. valeu pela ajuda outra vez. agora estarei olhando essas punçoes que vocês me passaram grato e assim que eu tiver alguma dúvida ou ter conseguido estarei retornando aqui.. valeu..

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

echo date('Y-m-d', strtotime('13/03/2014'));

 

http://php.net/date

http://php.net/strtotime

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites


$date = DateTime::parseFromFormat('d/m/Y','13/03/2014');

echo $date->format('Y-m-d');

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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')));

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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ão ISO 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..

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;

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.