Como obter a data e hora atuais em PHP: melhores práticas em 2025
\n\nTodo desenvolvedor PHP, do iniciante ao sênior, já se perguntou: "How do I get the current date and time in PHP?". Essa pergunta no Stack Overflow acumula milhares de visualizações e continua relevante. Em 2025, com o PHP mantendo sua posição sólida no desenvolvimento web, saber trabalhar corretamente com datas e horas não é apenas uma competência básica, mas uma necessidade. Logging, cache, relatórios, integração com APIs — tudo exige precisão temporal. Neste artigo, vamos explorar não apenas as funções clássicas, mas também as melhores práticas modernas para que seu código seja limpo, confiável e preparado para qualquer fuso horário.
\n\nO clássico: date() e time()
\n\nA maneira mais simples e rápida de obter a data e hora atuais em PHP é a função date(). Ela aceita uma string de formato e retorna a data formatada com base na hora atual do servidor ou em um timestamp específico.
<?php\necho date('Y-m-d H:i:s'); // 2025-04-10 14:30:00\necho date('d/m/Y'); // 10/04/2025\necho date('r'); // Thu, 10 Apr 2025 14:30:00 +0300\n?>\n\nE se você precisar apenas do Unix timestamp (número de segundos desde 1º de janeiro de 1970)? Use time():
<?php\n$timestamp = time();\necho $timestamp; // 1744273800 (exemplo)\necho date('Y-m-d H:i:s', $timestamp);\n?>\n\nImportante: date() usa o fuso horário definido no php.ini através da diretiva date.timezone, ou definido pela função date_default_timezone_set(). Em 2025, isso ainda funciona para scripts simples, mas para projetos sérios existem ferramentas mais flexíveis.
Abordagem moderna: a classe DateTime
\n\nDesde o PHP 5.2 (há muito tempo), a linguagem ganhou uma forma orientada a objetos de trabalhar com datas — a classe DateTime. Ela se tornou o padrão de facto para a maioria dos frameworks e CMSs. Por quê? Porque é mais flexível, legível e segura.
<?php\n$now = new DateTime();\necho $now->format('Y-m-d H:i:s'); // 2025-04-10 14:30:00\n\n// Com fuso horário específico\n$now = new DateTime('now', new DateTimeZone('America/Sao_Paulo'));\necho $now->format('Y-m-d H:i:s'); // 2025-04-10 10:30:00 (BRT)\n?>\n\nCom DateTime, você pode manipular datas facilmente: adicionar dias, subtrair meses, comparar objetos. Por exemplo:
<?php\n$today = new DateTime();\n$nextWeek = (new DateTime())->modify('+7 days');\n$diff = $nextWeek->diff($today);\necho $diff->days; // 7\n?>\n\nEssa é a abordagem recomendada pelas melhores práticas de PHP em 2025. Ela é imutável (se você não modificar o objeto diretamente) e intuitiva.
\n\nVariante imutável: DateTimeImmutable
\n\nSe você trabalha em um projeto sério onde a previsibilidade é importante, use DateTimeImmutable. Diferente de DateTime, seus métodos não alteram o objeto original, mas retornam um novo. Isso evita mutações acidentais de estado.
<?php\n$date = new DateTimeImmutable('2025-04-10');\n$newDate = $date->modify('+1 month');\necho $date->format('Y-m-d'); // 2025-04-10 (inalterado)\necho $newDate->format('Y-m-d'); // 2025-05-10\n?>\n\nEm 2025, isso é considerado boa prática — use DateTimeImmutable sempre que possível.
Fusos horários: configuração e conversão
\n\nErro de fuso horário é um dos problemas mais comuns. Imagine: servidor nos EUA, usuário no Brasil, e você exibindo o horário de Greenwich. Um clássico desastre.
\n\nPara evitar isso, sempre especifique o fuso horário explicitamente. A maneira mais confiável é defini-lo no início do script com date_default_timezone_set():