PHP

Como formatar datas com PHP

Por em

Uma questão que às vezes tira o sono de muitos desenvolvedores PHP, é a formatação de data e hora. Já vi muitos códigos por aí em pleno PHP 5.6 que convertem e formatam data usando códigos de string e outros códigos mirabolantes.

No PHP existem muitas funções nativas que fazem diversas operações com datas, mas a partir do PHP 5.2 foi criado a classe DateTime que faz o trabalho duro com as datas e horários. Infelizmente, muitos desenvolvedores não a conhecem, deixando de usar um código altamente estruturado. O profissional PHP hoje tem que pelo menos conhecer o DateTime, porque, existem métodos procedurais para trabalhar com data e o DateTime é orientado a objetos.

Qual é a ideia?

Usar o DateTime para realizar algumas operações com datas.

O que faremos?

  1. Brincar com o DateTime
  2. Considerações finais. 

Passos

  1. Brincar com a DateTime.

Para iniciar um DateTime simplesmente:

$date = new \DateTime();//isto criará um datetime com a data e hora atual.

Para iniciar um DateTime de qualquer outro formato:

$date =  \DateTime::createFromFormat('d/m/Y', '01/01/2015');//isto criará um datetime a partir do formato de data usado no Brasil. Primeiro parâmetro é o format, segunda a data.

Para adicionar tempo em uma data:

$date->add(new \DateInterval('P30D'));//Adicionando 30 dias a data inicial

A classe DateInterval é um complemento para administrar intervalos e formatos para DateTime. Para inicia-lo é necessário ter um P (de período) e depois o intervalo em anos, meses, dias, segundos, etc.

Para subtrair tempo em uma data:

$date->sub(new \DateInterval('P30D'));//Subtraindo 30 dias a data inicial

Diferença entre duas datas:

$datetime1 = new \DateTime('2015-10-11');
$datetime2 = new \DateTime('2015-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->days;

Veja que com três linhas mostramos a diferença entre duas data. Depois é só usar a variável days para pegar a diferença em dias.

Para mostrar um DateTime:

echo $date->format(\DateTime::ATOM);//mostrará um datetime no formato ATOM (MySQL)
echo $date->format('d/m/Y');//mostrará um datetime no formato usado no Brasil 00/00/0000

Veja aqui os formatos de data e hora.

Com DateTime podemos fazer comparações diretas para verificar igualdades, se uma data é menor que outra.

var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);
  1. Considerações finais

É isso aí pessoal, espero que brinquem bastante com o DateTime, vejam a importância e a facilidade de se trabalhar orientado a objetos, e, passem a usar menos o modo procedural para trabalhar com data e horários.

Referências:

http://php.net/manual/en/class.datetime.php

http://php.net/manual/en/class.dateinterval.php

http://sixrevisions.com/web-development/php-dateinterval-class/