Trabalhando com datas no PHP

trabalhando-com-datas-no-php

Já se foi o tempo em que eu tinha medo de ficar trabalhando com datas no PHP. Toda vez que tinha que gravar uma data no banco de dados, ou apresentá-la na tela após um SELECT, dava um frio na barriga. Cheguei a criar (e me envergonho disto) em um sistema de testes que desenvolvi à muito tempo atrás, tabelas no banco de dados onde o tipo das colunas que armazenavam datas eram VARCHAR, só pra não precisar ficar tratando e manipulando as datas do padrão americano para o nosso e vice-versa. Nunca, e repito em caixa alta, NUNCA faça isso. Além de ser uma atitude extremamente amadora, você ainda estará causando um grande problema para sua aplicação futuramente, quando tiver a necessidade de exibir relatórios por intervalos de datas e qualquer outra operação do gênero.

 

Dada a introdução, quero apresentar para vocês o poder de manipulação de datas proporcionada nativamente pelo PHP (em suas últimas versões, é claro) através do DateTime. Mas, melhor do que eu escrever sobre isso, vai ser mostrar na prática. Como os exemplos vão ser curtinhos, não vejo a necessidade de instruir e organizar a apresentação por arquivos. Vou deixar os códigos comentados (quando necessário) abaixo e você vai no CTRL+C / CTRL+V para testar da maneira que preferir. Vamos lá então?

 

Situação 1: Preciso pegar a data atual e gravá-la no banco de dados. Obviamente, ela precisa estar no padrão americano (AAAA-MM-DD). Veja como abaixo:

 

$data = new DateTime();
echo $data->format('Y-m-d');

 

Não há o que comentar aí… Em um momento estou instanciando a classe DateTime, e logo em seguida uso a função “format” para dizer o padrão que quero. Consulte, se necessário, a lista que indica o que cada letrinha dentro da função significa aqui.

 

Situação 2: Já tenho a data gravada em meu banco de dados no padrão americano, quero agora apresentá-la no padrão brasileiro.

 

/**
 *
 * chamo a função estática createFromFormat, onde passo
 * o formato de entrada da data e a própria data
 * e armazeno na variável $data
 */
$data = DateTime::createFromFormat('Y-m-d', '2013-04-27');

/**
 *
 * agora é só formatá-la de acordo com o padrão que desejo
 */
echo $data->format('d/m/Y');

 

Situação 3: Imagine que seu servidor está configurado com o fuso horário local e você precisa pegar a data e hora de Londres para apenas um caso em sua aplicação. Alterar as configurações do PHP seria suicídio, já que todos os outros casos utilizam o GMT local. Para isso, veja o exemplo:

 

/**
 *
 * No primeiro argumento do construtor, passamos 'now'
 * pegando assim a data e hora atual.
 * No segundo argumento informamos a timezone que desejamos
 * veja as timezones em http://php.net/manual/pt_BR/timezones.php
 */
$data = new DateTime('now', new DateTimeZone('Europe/London'));

/**
 *
 * formatando para aparecer também as horas e minutos
 */
echo $data->format('Y-m-d H:i');

 

Situação 4: Gravei a solicitação do meu cliente no banco,mas preciso somar dois dias à data atual, para informar por email o tempo de resposta ao cliente.

 

/*
 *
 * para adicionar dias à data atual,
 * basta passar a informação no construtor.
 */
$data = new DateTime('+2 days');
echo $data->format('d/m/Y');

 

Situação 5: Meu sistema é para venda de carros. A partir da data da compra, preciso estipular um período de 2 meses e 15 dias para a entrega do automóvel. Difícil fazer isto? Que nada, seguindo os moldes do exemplo anterior, observe:

 

$data = new DateTime('+2 months, 15 days');
echo $data->format('d/m/Y');

O mesmo processo serve para datas retroativas.

 

Situação 6: Compro um pacote de viagem na CVC (olha a propaganda gratuita, hein…). É informado no sistema o dia que parto de Porto Alegre e o dia que eu volto. O Sistema deve gerar um voucher para mim informando a quantidade de dias que ficarei viajando. Ou seja, diferença entre datas. Veja:

 

/**
 *
 * criamos as datas inicial e final
 */
$inicio = new DateTime('2013-07-04');
$final  = new DateTime('2013-07-10');

/**
 *
 * Usando a função diff calculamos a diferença
 */
$diferenca = $inicio->diff($final);

/**
 *
 * Apresentamos a quantidade de dias formatada.
 * Pode-se calcular em dias, meses, anos, etc...
 */
echo $diferenca->format('%d dias');

 

Conclusão: há essas e uma porção de outras funções onde podemos fazer de tudo com as datas. Não há mais desculpas para gambiarras. O PHP nos oferece uma infinidade de classes e funções que facilitam o nosso trabalho, cabe a nós estudarmos as suas características e saber o momento certo de aplicá-las.

 

Espero, mais uma vez, que tenham gostado do post e que este possa ajudar à todos que, assim como eu tinha, ainda tem receio de trabalhar com manipulação de datas em suas aplicações.


Marcado com: , ,
Publicado em Desenvolvimento, Tecnologia
Volte Sempre!
Meus artigos te ajudaram de alguma forma e você não sabe como me agradecer? Que tal me pagar uma Coca-Cola bem gelada?

Sobre o autor

Me chamo Ricardo Brusch, sou programador e desenvolvedor de sistemas para internet. Também sou aspirante a escritor, e você pode ler alguns de meus contos malucos em contos.ricardobrusch.com.br.
Parceiros





Publicidade