Datas no PHP

Capa Curso PHP
Tempo de leitura: 4 minutos

Datas no PHP: O gerenciamento de datas e horários é uma necessidade universal em aplicações web, desde registrar o momento de uma transação até agendar tarefas futuras. O PHP fornece ferramentas duais para essa tarefa: um conjunto de funções básicas herdadas e a classe moderna DateTime, que oferece uma abordagem mais orientada a objetos, robusta e consciente de fusos horários.

1. 📅 Funções Básicas de Data e Tempo

As funções legadas (date, time, strtotime) são úteis para tarefas rápidas, mas são baseadas no Timestamp Unix, que é o número de segundos desde 1º de janeiro de 1970 (Era Unix).

FunçãoPropósitoExemplo PHP
time()Retorna o timestamp Unix atual (inteiro).echo time();
date(formato, timestamp)Formata um timestamp em uma string legível. Se $timestamp for omitido, usa o tempo atual.echo date("d/m/Y H:i:s");
strtotime(string)Converte uma string de data legível (em inglês) para um timestamp Unix.$ts = strtotime("tomorrow");

Exemplo de Conversão

PHP

<?php
// Converter uma string para timestamp
$timestamp = strtotime("2023-11-29 10:30:00");

// Usar o timestamp para formatar a data
echo date("d/m/Y", $timestamp); // Saída: 29/11/2023
?>

2. 🕰️ A Classe DateTime: Orientação a Objetos

A classe DateTime e suas classes relacionadas são a maneira preferida e mais poderosa de lidar com datas em PHP moderno, pois oferecem controle total sobre fusos horários e cálculos complexos.

A. Criação e Formatação

Para usar DateTime, você cria um objeto, que encapsula a data e hora.

PHP

<?php
// 1. Criar um objeto DateTime (data e hora atuais)
$data = new DateTime();

// 2. Formatar a saída (utilizando o método format())
echo $data->format('Y-m-d H:i:s'); // Ex: 2025-12-02 19:38:00

// 3. Criar com uma data específica
$dataEspecifica = new DateTime('2024-05-15');
echo $dataEspecifica->format('l, d/m/Y'); // Ex: Wednesday, 15/05/2024
?>

B. Fusos Horários (DateTimeZone)

A classe DateTime é time zone aware (consciente de fuso horário), garantindo precisão em sistemas globais.

PHP

<?php
// Criar um objeto DateTime com fuso horário específico
$fusoBrasilia = new DateTimeZone('America/Sao_Paulo');
$data = new DateTime('now', $fusoBrasilia);

echo $data->format('Y-m-d H:i:s T'); // 'T' mostra a abreviação do fuso.
?>

3. ➕ Cálculos de Data e Intervalos

Em vez de manipular timestamps manualmente para somar ou subtrair períodos, a classe DateInterval permite cálculos sem erros.

A. Modificando Datas (add e sub)

Você usa DateInterval para definir o período que deseja adicionar ou subtrair. O formato do intervalo (P1M) segue o padrão ISO 8601, onde P significa Período, Y ano, M mês, D dia.

PHP

<?php
$dataAtual = new DateTime();
echo "Data Inicial: " . $dataAtual->format('Y-m-d') . "<br>";

// Adiciona 1 mês (P1M)
$dataAtual->add(new DateInterval('P1M')); 
echo "Após Adicionar 1 Mês: " . $dataAtual->format('Y-m-d') . "<br>";

// Subtrai 5 dias (P5D)
$dataAtual->sub(new DateInterval('P5D')); 
echo "Após Subtrair 5 Dias: " . $dataAtual->format('Y-m-d');
?>

B. Diferença entre Datas (diff)

O método diff() retorna um objeto DateInterval que representa a diferença exata entre duas datas.

PHP

<?php
$data1 = new DateTime('2023-11-29');
$data2 = new DateTime('2023-12-10');

// Calcula a diferença entre data2 e data1
$intervalo = $data2->diff($data1);

// O método format() do DateInterval usa especificadores com '%'
echo $intervalo->format('O intervalo é de %a dias (ou %y anos, %m meses e %d dias).'); 
// Saída: O intervalo é de 11 dias (ou 0 anos, 0 meses e 11 dias).
?>

4. 📝 Tabela de Formatação Comum

O método format() aceita diversas letras para personalizar a saída da data e hora.

FormatoDescriçãoExemplo de Saída
d/m/YData (dia/mês/ano com 4 dígitos)02/12/2025
Y-m-d H:i:sFormato SQL / ISO 86012025-12-02 19:38:00
lNome completo do dia da semanaTuesday
FNome completo do mêsDecember
a ou Aam/pm em minúsculo ou maiúsculopm ou PM
UTimestamp Unix (segundos)1701358080

5. ✅ Boas Práticas

  • Prefira DateTime: Utilize a classe DateTime e seus métodos para qualquer manipulação de datas, pois é menos propensa a erros do que a manipulação manual de timestamps.
  • Defina o Fuso Horário Padrão: Use a função date_default_timezone_set('Seu/Fuso') no início do script (ou no arquivo de configuração) para garantir que todas as operações de data usem o fuso horário correto.
  • Valide Entradas: Sempre valide strings de data fornecidas pelo usuário antes de tentar convertê-las em objetos DateTime.
  • Utilize DateInterval: Para somar ou subtrair períodos, use add() ou sub() com DateInterval em vez de tentar cálculos manuais.

✅ Conclusão Datas no PHP

Datas no PHP: O manejo de datas no PHP exige a compreensão das funções básicas (para timestamps rápidos) e, crucialmente, o domínio da abordagem orientada a objetos da classe DateTime. Ao utilizar DateTime em conjunto com DateInterval e DateTimeZone, você garante que suas aplicações realizem cálculos de tempo de forma precisa, escalável e consciente de fuso horário.

Toda jornada tem um início, e o início para se tornar um desenvolvedor back-end é dominar as seguintes tecnologias, que você encontra aqui mesmo:

SQL
SQL
Capa Curso PHP
PHP
Laravel
Laravel

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.