Manipulação de Datas e Horas em PHP
Aprenda a manipular datas e horas em PHP usando DateTime::add(), date_add() e outras funções essenciais com exemplos práticos.
PHP é uma linguagem de programação server-side popular, amplamente utilizada para criar páginas web dinâmicas. Uma das funcionalidades mais importantes do PHP é sua capacidade de manipular datas e horas. Neste artigo, vamos explorar as diversas funções de manipulação de data e hora disponíveis em PHP e como elas podem ser usadas para simplificar seu processo de codificação.
Entendendo Datas e Horas em PHP
Antes de nos aprofundarmos nas diversas funções disponíveis em PHP para manipular datas e horas, vamos primeiro entender como o PHP lida com esses valores. Em PHP, datas e horas são representadas como strings. O formato mais comum para representar uma data é YYYY-MM-DD, enquanto o formato mais comum para representar uma hora é HH:MM:SS.
O PHP também fornece uma função embutida chamada date() que pode ser usada para formatar datas e horas de diversas maneiras diferentes. A função date() recebe dois argumentos: uma string de formato e um timestamp. A string de formato especifica o formato desejado para a data e hora, enquanto o timestamp especifica o momento que deve ser formatado.
Adicionando Tempo a Datas em PHP
A função date() é usada principalmente para formatar timestamps em strings legíveis. Para adicionar ou subtrair intervalos de tempo de uma data, o PHP fornece a classe DateTime juntamente com seu método add(). A função procedural date_add() (que dá nome a este capítulo) é um alias legado para DateTime::add(), mas recomenda-se usar a abordagem orientada a objetos.
Veja um exemplo de como adicionar um dia a uma data específica usando DateTime::add():
Neste exemplo, criamos um objeto DateTime a partir da string de data inicial. Em seguida, usamos o método add() com um objeto DateInterval (P1D representa um período de 1 dia) para modificar a data. Por fim, formatamos e exibimos a data atualizada.
Entendendo o formato DateInterval
A string passada para DateInterval segue o formato de duração ISO 8601. Ela sempre começa com a letra P (de "period"). As partes de data vêm primeiro, depois um separador opcional T introduz as partes de hora:
| Código | Significado |
|---|---|
Y | anos |
M | meses (antes do T) |
D | dias |
T | separador antes das partes de hora |
H | horas |
M | minutos (após o T) |
S | segundos |
Portanto, P1Y2M10DT2H30M significa "1 ano, 2 meses, 10 dias, 2 horas e 30 minutos." Note que M significa meses antes do T e minutos depois dele — esta é uma fonte comum de erros.
<?php
$date = new DateTime('2022-01-01 00:00:00');
$date->add(new DateInterval('P1Y2M10DT2H30M'));
echo $date->format('Y-m-d H:i:s');
?>add() modifica o objeto original
DateTime::add() altera o objeto no lugar em vez de retornar um novo. Se você precisar manter a data original, use DateTimeImmutable, que retorna um objeto novo a cada operação:
<?php
$start = new DateTimeImmutable('2022-03-02');
$next = $start->add(new DateInterval('P1D'));
echo $start->format('Y-m-d'), "\n"; // unchanged
echo $next->format('Y-m-d'), "\n"; // one day later
?>Subtraindo Tempo de Datas
Para recuar uma data, use o método DateTime::sub() com um DateInterval. Ele funciona exatamente como add(), mas ao contrário:
<?php
$date = new DateTime('2022-03-02');
$date->sub(new DateInterval('P1M')); // subtract one month
echo $date->format('Y-m-d');
?>Medindo a Diferença Entre Datas
Para descobrir a distância entre duas datas, use DateTime::diff() (alias procedural date_diff()). Ele retorna um DateInterval que você pode formatar:
<?php
$a = new DateTime('2022-01-01');
$b = new DateTime('2022-03-02');
$diff = $a->diff($b);
echo $diff->format('%a days'); // total days between the two dates
?>Outras Funções de Manipulação de Data e Hora em PHP
Além de DateTime::add(), o PHP fornece várias outras funções para trabalhar com datas e horas. Algumas delas incluem:
strtotime(): Converte uma descrição textual de data/hora em inglês para um timestamp Unixtime(): Retorna o timestamp Unix atualmktime(): Retorna o timestamp Unix para uma data e hora específicasdate_modify(): Modifica um objetoDateTimeusando um formato relativo textual (ex.:+1 day)date_sub(): Alias procedural legado paraDateTime::sub()date_diff(): Calcula a diferença entre dois objetosDateTime
Usar essas funções junto com os métodos de DateTime pode ajudá-lo a lidar com diversas operações de data e hora de forma eficiente.
Conclusão
Neste artigo, exploramos como manipular datas e horas em PHP. Esclarecemos que a função date() é usada para formatação, enquanto adicionar ou subtrair tempo é melhor tratado usando o método DateTime::add(). Também revisamos outras funções úteis como strtotime(), mktime() e date_diff(), e observamos que date_add() é um alias procedural legado. Usar essas ferramentas corretamente ajudará você a gerenciar operações de data e hora de forma confiável em suas aplicações PHP.