Trabajo con fechas en PHP: bibliotecas y herramientas
El trabajo con fechas y horas es una de las tareas más comunes en el desarrollo web. PHP tiene la clase incorporada DateTime, pero su funcionalidad a menudo no es suficiente para operaciones complejas: calcular diferencias de tiempo, formateo con configuración regional, trabajo con zonas horarias. Aquí es donde las bibliotecas especializadas vienen al rescate. En este artículo, analizaremos las mejores herramientas para trabajar con fechas en PHP.
1. La clase incorporada DateTime
Antes de pasar a bibliotecas de terceros, vale la pena recordar la solución nativa: la clase DateTime. Está disponible en PHP desde la versión 5.2 y proporciona funcionalidad básica:
- Creación de objetos de fecha y hora
- Formateo (a través de
format()) - Modificación de fecha (a través de
modify()) - Trabajo con zonas horarias (
DateTimeZone) - Comparación de fechas
Ejemplo de uso:
<?php$date = new DateTime('2024-12-31');$date->modify('+1 day');echo $date->format('Y-m-d'); // 2025-01-01?>Sin embargo, DateTime tiene desventajas: falta de métodos convenientes para trabajar con intervalos, dificultades con encadenamiento de métodos y soporte limitado para formatos legibles por humanos.
2. Carbon — la biblioteca más popular
Carbon es una extensión para DateTime que agrega una API conveniente, encadenamiento de métodos y muchas funciones auxiliares. Instalación a través de Composer:
composer require nesbot/carbonCaracterísticas clave de Carbon:
- Métodos legibles por humanos:
now(),yesterday(),tomorrow() - Localización (soporte para idioma ruso)
- Trabajo con intervalos:
diffForHumans() - Modificación de fecha mediante encadenamiento:
->addDays(5)->subMonths(2) - Comparación:
isWeekend(),isPast(),isFuture()
Ejemplo con localización en ruso:
<?phprequire 'vendor/autoload.php';use Carbon\\Carbon;
Carbon::setLocale('ru');$date = Carbon::now();echo $date->diffForHumans(); // "только что" o "3 часа назад"?>Carbon es el estándar de facto para trabajar con fechas en Laravel y muchos otros proyectos.
3. Chronos — una alternativa ligera
Chronos de CakePHP es otra extensión de DateTime, pero con un enfoque en ligereza y rendimiento. Instalación:
composer require cakephp/chronosDiferencias con Carbon:
- Sin dependencias (excepto PHP)
- Tipado más estricto
- Soporte para objetos inmutables (immutable) por defecto
- Menos métodos, pero los principales están presentes
Ejemplo:
<?phpuse Cake\\Chronos\\Chronos;
$date = Chronos::now();$future = $date->addDays(10);echo $future->format('d.m.Y');?>Chronos es bueno para proyectos donde la limpieza del código y el rendimiento son importantes, pero no se necesita un ecosistema extenso.
4. CarbonImmutable y DateTimeImmutable
A partir de PHP 5.5, apareció la clase DateTimeImmutable, que no modifica el objeto original, sino que devuelve uno nuevo. En Carbon hay un análogo: CarbonImmutable. Esto evita mutaciones accidentales de datos:
<?phpuse Carbon\\CarbonImmutable;
$date = CarbonImmutable::now();$newDate = $date->addDay();echo $date->format('Y-m-d'); // El original no cambió?>Use versiones inmutables si las fechas se pasan entre funciones o se almacenan en caché.
5. League\\Period — trabajo con períodos
La biblioteca Period de The League of Extraordinary Packages está diseñada para trabajar con intervalos de tiempo y períodos.
También en la biblioteca
OpenTelemetry Go: guía completa con ejemplos prácticos
Generación de PDF en Rust: revisión de bibliotecas y ejemplos de código
Trabajo con CSV en Kotlin: bibliotecas y ejemplos de código
Aprendizaje automático en PHP: revisión de bibliotecas para integración de ML