Trabalho com datas em PHP: visão geral de bibliotecas e ferramentas
Trabalhar com datas e horas é uma das tarefas principais no desenvolvimento web. O PHP possui a classe embutida DateTime, mas para operações complexas (fusos horários, intervalos, formatação, localização), bibliotecas especializadas são frequentemente usadas. Neste artigo, veremos três ferramentas populares: Carbon, Chronos e o DateTime aprimorado, com exemplos de código e recomendações.
1. Classe DateTime embutida
O PHP fornece funcionalidades básicas através das classes DateTime, DateTimeImmutable, DateInterval e DatePeriod. Isso é suficiente para tarefas simples.
<?php// Criando um objeto de data$date = new DateTime('2025-04-15 14:30:00', new DateTimeZone('Europe/Moscow'));echo $date->format('Y-m-d H:i:s'); // 2025-04-15 14:30:00
// Modificando a data$date->modify('+1 day');echo $date->format('d.m.Y'); // 16.04.2025
// Diferença entre datas$now = new DateTime();$interval = $now->diff($date);echo $interval->days; // número de dias?>Prós: embutido no PHP, não requer instalação. Contras: sintaxe verbosa, sem encadeamento de métodos (fluent interface), difícil trabalhar com localização.
2. Carbon — o extensor de DateTime mais popular
Carbon é uma biblioteca que estende DateTime. Ela adiciona métodos convenientes para trabalhar com datas, intervalos, fusos horários e localização. Instalação via Composer:
composer require nesbot/carbonExemplos de uso do Carbon:
<?phpuse Carbon\\Carbon;
// Data atual$now = Carbon::now();echo $now->toDateString(); // 2025-04-15
// Criando uma data$date = Carbon::create(2025, 12, 25, 10, 30, 0, 'Europe/Moscow');echo $date->format('d.m.Y H:i'); // 25.12.2025 10:30
// Diferença em formato legívelecho Carbon::now()->subDays(5)->diffForHumans(); // "5 dias atrás"
// Encadeamento de métodos$future = Carbon::now()->addWeek()->startOfDay();echo $future->toDateTimeString(); // 2025-04-22 00:00:00
// LocalizaçãoCarbon::setLocale('pt_BR');echo Carbon::now()->translatedFormat('l j F Y'); // "terça-feira 15 abril 2025"?>O Carbon suporta quase tudo: manipulações (addDays(), subMonths()), comparações (isWeekend(), between()), formatação com localização, trabalho com intervalos e períodos. É o padrão de facto para Laravel e muitos projetos.
3. Chronos — alternativa leve do CakePHP
Chronos é uma biblioteca da equipe do CakePHP, que também estende DateTime. É mais leve que o Carbon, mas fornece funcionalidades semelhantes. Instalação:
composer require cakephp/chronosExemplos:
<?phpuse Cake\\Chronos\\Chronos;
// Criação e manipulações$date = Chronos::now();$modified = $date->addDays(3)->subHours(2);echo $modified->toIso8601String(); // 2025-04-18T12:30:00+03:00
// Diferença com saída legível$past = Chronos::parse('2025-04-10');echo $past->diffForHumans(); // "5 dias atrás"?>O Chronos suporta versões mutáveis e imutáveis (Chronos e ChronosImmutable). Diferencia-se pela tipagem estrita e menor tamanho. É adequado se você não precisa de todas as funções do Carbon.
4. Comparação das bibliotecas
- DateTime (embutido) — funcionalidade básica, sem dependências, adequado para scripts simples.
- Carbon — API rica, localização, ideal para Laravel e projetos complexos.
- Chronos — leve, objetos imutáveis, bom para CakePHP ou aplicações com restrições de tamanho.
5. Quando usar qual bibli
Também na biblioteca
Monitoramento de aplicações Go (Golang): bibliotecas e ferramentas
Trabalhando com CSV em Swift (iOS/macOS): biblioteca SwiftCSV e fundamentos de parsing
PHPMailer para PHP: guia completo com exemplos
Cliente Redis para Java: Jedis, Lettuce e Redisson — visão geral e exemplos