Trabalho com datas em PHP: melhores bibliotecas e ferramentas
O processamento de datas e horas é uma das tarefas mais comuns no desenvolvimento web. O PHP fornece um poderoso conjunto de ferramentas nativas, mas para projetos complexos, bibliotecas mais convenientes são frequentemente necessárias. Neste artigo, vamos analisar as principais formas de trabalhar com datas em PHP, comparar bibliotecas populares e mostrar exemplos práticos.
Classes nativas do PHP: DateTime e DateTimeImmutable
A partir da versão 5.2, o PHP inclui classes orientadas a objetos para trabalhar com datas. As principais são:
DateTime— objeto de data/hora mutávelDateTimeImmutable— versão imutável (mais segura ao passar por referência)DateInterval— representação de um intervalo de tempoDatePeriod— iteração sobre datas com um intervalo definido
Exemplo de criação e formatação de data:
<?php$date = new DateTime('2024-12-25 10:30:00');echo $date->format('Y-m-d H:i:s'); // 2024-12-25 10:30:00
// Adicionando 1 semana$date->modify('+1 week');echo $date->format('Y-m-d'); // 2025-01-01?>Carbon — padrão de facto para Laravel
Carbon é uma extensão da classe DateTime que adiciona dezenas de métodos convenientes. A biblioteca é amplamente usada no Laravel e Symfony. Instalação via Composer:
composer require nesbot/carbonPrincipais recursos do Carbon:
- Modificadores em linguagem humana:
->addDay(),->subMonth(),->startOfWeek() - Localização:
Carbon::setLocale('pt_BR') - Datas relativas:
->diffForHumans()(retorna "3 horas atrás", "em 2 dias") - Interpretação de linguagem natural:
Carbon::parse('next monday')
Exemplo de uso do Carbon:
<?phpuse Carbon\\Carbon;
$now = Carbon::now('America/Sao_Paulo');echo $now->toDateString(); // 2025-03-15
$birthday = Carbon::create(1990, 5, 20);echo $birthday->age; // 34
// Diferença entre datas$start = Carbon::parse('2024-01-01');$end = Carbon::parse('2024-12-31');echo $start->diffInDays($end); // 365
// Data relativaecho Carbon::parse('-1 week')->diffForHumans(); // "1 semana atrás"?>Chronos — alternativa do CakePHP
Chronos é uma biblioteca independente criada pelos desenvolvedores do CakePHP. Sua principal diferença é a imutabilidade por padrão (como DateTimeImmutable). Características:
- Todos os objetos são imutáveis — mais seguro para ambientes multithread
- Suporte a fusos horários considerando horário de verão
- Métodos convenientes de arredondamento:
->startOfDay(),->endOfMonth() - Leve (sem dependências)
Exemplo de trabalho com Chronos:
<?phpuse Cake\\Chronos\\Chronos;
$date = Chronos::now();echo $date->addDays(10)->format('d.m.Y'); // 25.03.2025
// Diferença com especificação de precisão$future = Chronos::create(2025, 12, 31);echo $date->diffInDays($future); // 291
// Verificação de dataecho $date->isWeekend() ? 'Fim de semana' : 'Dia útil';?>CakePHP Time — para trabalhar com fusos horários
Outra ferramenta do CakePHP — Cake\\I18n\\Time. Ela estende o Chronos e adiciona suporte à internacionalização. Útil quando é necessário exibir datas em diferentes idiomas:
<?phpuse Cake\\I18n\\Time;
Time::setDefaultLocale('pt_BR');$time = Time::parse('2025-03-15 14:30:00', 'America/Sao_Paulo');echo $time->i18nFormat('dd MMMM yyyy'); // 15 março 2025?>Comparação de bibliotecas
Para escolher a biblioteca adequada, observe os seguintes critérios:
- Carbon — melhor escolha para projetos Laravel
Também na biblioteca
Geração de PDF em C# (.NET): Guia Completo de Bibliotecas
Filas de Tarefas para Kotlin: Coroutines e KJobQueue