Armazenando datas de uma outra forma

Esse artigo vai explicar uma forma alternativa de se armazenar datas em banco de dados. Não é uma novidade, aliás isso é coisa da galera da "old school", o pessoal que trabalhava com grande porte e coisas assim. Mas essa técnica não morreu, é bem interessante para se ter mais uma carta na manga.

[ Hits: 21.279 ]

Por: Flávio Gonçalves Garcia em 01/07/2004


Eu e as datas...



Apesar dos meus 25 anos (minha idade quando esse artigo foi publicado), acho que tenho um pouco de experiência como programador, já com 15 anos já fazia meus 'hello world!!!' e com 17 anos estava fazendo um sistema de controle de estoque em VB (hehehe, quem não faria), e de lá pra cá, trabalhar com datas sempre me deixava, deixa e porque não, deixará com uma pulga atrás da orelha.

E logo porque trabalhar com datas me deixa tão confuso? Ora usa-se um campo datetime ou timestamp e pronto certo? Certo, até precisarmos saber a distância (em dias, horas) entre duas datas, adicionar/subtrair um (ou mais) dia(s) em uma data, e tem coisa pior... e é por isso que servem aquelas funções mágicas para trabalhar com datas, em VB/ASP tínhamos funções maravilhosas; mas o resultado dependia de como o seu servidor estava configurado. Se a data estivesse no formato americano era um jeito, se estivesse em formato brasileiro, era outro, e se o servidor IIS estivesse diferente do SQL Server, aí segura neném... E o mais bacana de tudo; sempre tem uma conversão pra lá outra pra cá.

Então conheci (há uns 3 anos e meio) o fabuloso mundo do PHP e o MySQL, pelo melhor custo-benefício em hospedagem de pequenos sites (isso eu pensava na época, hoje em dia tenho total segurança nessa dupla).

Tive a necessidade óbvia de trabalhar com datas e para minha surpresa, os argumentos das funções date(), gmdate(), entre outras que formatam datas, tem como argumento opcional um tal de "unix timestamp".

Era só o que faltava, se vocês vissem a lista de funções que criei para automatizar as minhas datas... mas beleza, isso vai se normalizando quando começamos a pensar melhor e conversar com a galera que é um pouco mais experiente em PHP, olhar os exemplos de script.

Porém a maior mudança que tive na forma de armazenar datas em banco foi quando comecei a fuçar alguns projetos open-source, mais particularmente o phpBB.

Na próxima página explicarei essa mudança...
    Próxima página

Páginas do artigo
   1. Eu e as datas...
   2. Datas armazenadas como inteiro no banco
   3. Conclusão
Outros artigos deste autor

Debian com Apache, PHP4, PHP5 e MySQL

I Semana de Capacitação e Desenvolvimento em Software Livre

Leitura recomendada

Executando comandos DML em base de dados MySQL através do Eclipse PHP (Bônus: Temas e Fontes no Eclipse)

Sistema PDV com PHP-GTK2 e ACBrMonitor (parte 1)

Oracle 9i, Apache e PHP

Provendo dados em um servidor PostgreSQL através do Apache e PHP

PHP com suporte ao MS SQL Server 7

  
Comentários
[1] Comentário enviado por fabio em 01/07/2004 - 01:45h

Bom, como a idéia é compartilhar conhecimento, vou mostrar aqui a forma como eu faço, não digo se é melhor ou pior que a mostrada no artigo, mas também funciona muito bem!

Todos os meus arquivos possuem um include para um arquivo global de configuração do sistema, o config.inc. Nele possuo uma variável que armazena o formato do campo DATETIME do banco de dados usado pelo sistema. Por exemplo, pra MySQL defino a variável assim:

$formato_data = 'Y-m-d';

E pra SQL Server seria:
$formato_data = 'm-d-Y';

Se a regionalização mudar, basta mudar uma variável que a lógica das queries estarão automaticamente atualizadas e funcionando.

Quando vou montat um insert, faço da seguinte forma:

$data = date($formato_data);
$insert = "INSERT INTO tabela (data) VALUES ($data)";

Dessa forma não perdemos os recursos que o banco de dados oferece para cálculo de datas e nem precisamos fazer malabarismos nas queries quando mudamos de banco de dados. :P

Bom, taí outra alternativa.

[]'s

[2] Comentário enviado por ygorth em 02/07/2004 - 11:41h

Boa alternativa fabio, enquanto mais cartas nas mangas melhor.

valeu piraz, seja bem-vindo!

[3] Comentário enviado por afonso_franca em 29/09/2005 - 13:59h

Há algum tempo eu descobri o UNIX DATE também trabalhando com o banco do PHPBB e desde então tornou-se o formato padrão de data pra mim (pelo menos até 19/01/2038 hehe).

Muito boa a matéria.

[4] Comentário enviado por marcossilva em 06/10/2005 - 17:35h

Desculpa, eu não entendi algo, como eu faço para armazenar as datas no banco de dados, desta forma ??

T+

[5] Comentário enviado por RedFoot em 29/09/2007 - 23:16h

bacana Fábio

estava precisando de algo desse tipo por aqui nas novas implementações que tô buscando no site.

abraço

[6] Comentário enviado por brunoestevao em 12/03/2008 - 14:56h

$data = date('Y-m-d');
$insert = "insert into tabela (data) values ($data)";

Abraços

Bruno Estêvão
www.sempihost.com.br
Hospedagem de sites com 30 dias grátis

[7] Comentário enviado por removido em 20/04/2009 - 10:11h

muito interessante! obrigado por compartilhar


Contribuir com comentário