Trabalho com Datas e Horas em PHP: do Básico ao Avançado
Trabalhar com datas e horas é uma das tarefas mais comuns no desenvolvimento web. Seja para exibir a data atual, calcular a diferença entre eventos ou salvar timestamps no banco de dados, o PHP oferece um conjunto de ferramentas poderoso e flexível. Neste artigo, vamos detalhar as principais funções, classes e melhores práticas para trabalhar com datas e horas em PHP.
O material será útil tanto para iniciantes que estão começando a estudar PHP quanto para desenvolvedores experientes que desejam sistematizar seus conhecimentos.
1. Funções Básicas: date(), time() e mktime()
Vamos começar pelo fundamento. O PHP oferece várias funções embutidas para trabalhar com datas. As mais populares são date(), time() e mktime().
Função time()
A função time() retorna o timestamp Unix atual — o número de segundos desde 1º de janeiro de 1970 00:00:00 UTC. Este é o valor base para muitas operações.
echo time(); // Exibirá algo como 1698765432Função date()
A função date() formata a data e hora local. O primeiro parâmetro é uma string de formato, o segundo (opcional) é um timestamp. Se o segundo parâmetro não for informado, usa-se a hora atual.
// Formatos básicosecho date("Y-m-d"); // 2023-10-31echo date("H:i:s"); // 14:30:00echo date("d.m.Y H:i"); // 31.10.2023 14:30echo date("l, j F Y"); // Tuesday, 31 October 2023
// Timestamp personalizado$timestamp = mktime(12, 0, 0, 1, 1, 2024);echo date("Y-m-d H:i:s", $timestamp); // 2024-01-01 12:00:00Símbolos de formatação populares:
d— dia do mês (01-31)m— mês (01-12)Y— ano no formato de 4 dígitosH— horas (00-23)i— minutos (00-59)s— segundos (00-59)
Função mktime()
mktime() cria um timestamp com base nos parâmetros fornecidos (horas, minutos, segundos, mês, dia, ano). Isso é útil para obter o timestamp de uma data específica.
// Criando um timestamp para 25 de dezembro de 2023, 10:30:00$christmas = mktime(10, 30, 0, 12, 25, 2023);echo date("d.m.Y H:i:s", $christmas); // 25.12.2023 10:30:002. Abordagem Orientada a Objetos: Classe DateTime
Embora as funções date() e time() sejam simples, elas têm limitações. Para operações mais complexas (comparação de datas, trabalho com fusos horários, adição/subtração de intervalos), é melhor usar a classe DateTime.
Criando objetos DateTime
// Hora atual$now = new DateTime();echo $now->format("Y-m-d H:i:s"); // 2023-10-31 14:30:00
// Data específica$date = new DateTime("2024-03-15 08:00:00");echo $date->format("d.m.Y"); // 15.03.2024
// Formatos relativos$nextWeek = new DateTime("+1 week");echo $nextWeek->format("Y-m-d");
$lastMonth = new DateTime("first day of last month");echo $lastMonth->format("Y-m-d");Trabalhando com Fusos Horários
Uma das principais vantagens do DateTime é o suporte a fusos horários.
// Especificando o fuso horário na criação$moscow = new DateTime("now", new DateTimeZone("Europe/Moscow"));echo $moscow->format("Y-m-d H:i:s"); // Horário de Moscou
// Alterando o fuso horário$newYork = new DateTime("now", new DateTimeZone("America/New_York"));echo $newYork->format("Y-m-d H:i:s"); // Horário de Nova York
// Lista de fusos disponíveis: https://www.php.net/manual/ru/timezones.phpComparação de Datas
$date1 = new DateTime("2024-01-01");$date2 = new DateTime("2024-12-31");
if ($date1 < $date2) { echo "A primeira data é anterior à segunda";}
// Dif