W3docs

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():

php— editable, runs on the server

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ódigoSignificado
Yanos
Mmeses (antes do T)
Ddias
Tseparador antes das partes de hora
Hhoras
Mminutos (após o T)
Ssegundos

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 Unix
  • time(): Retorna o timestamp Unix atual
  • mktime(): Retorna o timestamp Unix para uma data e hora específicas
  • date_modify(): Modifica um objeto DateTime usando um formato relativo textual (ex.: +1 day)
  • date_sub(): Alias procedural legado para DateTime::sub()
  • date_diff(): Calcula a diferença entre dois objetos DateTime

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.

Prática

Prática
O que a função date_add() faz em PHP?
O que a função date_add() faz em PHP?
Was this page helpful?