> Manuales > Manual de PHP

Explicaciones y prácticas comunes para el trabajo con fechas en PHP. Exploramos las formas de tratamiento de fechas en el lenguaje PHP, de manera sencilla y práctica, de forma nativa y mediante la librería Carbon.

Fechas en PHP

Una de las tareas más recurrentes en el desarrollo de cualquier aplicación es el trabajo con fechas. Por supuesto, PHP no es una excepción.

El lenguaje de manera nativa nos ofrece mecanismos suficientes para trabajar con fechas, pero aún así puede ser una buena idea apoyarse en alguna librería adicional, como es el caso de la conocida biblioteca Carbon. En este artículo vamos a mostrar algunos ejemplos de tratamiento de fechas de manera nativa y además explicaremos cómo mejorar las posibilidades del trabajo con fechas y hora usando Carbon, una popular librería de PHP.

Fechas en PHP de manera nativa

Para trabajar con fechas en PHP realmente no hace falta acudir a ningún tipo de complemento, más allá del propio lenguaje de programación. PHP dispone de una clase llamada DateTime que engloba todo el trabajo necesario para procesar fechas y realizar cálculos con fechas, así como con horas.

La clase DateTime está disponible a partir de PHP 5 y se puede usar de dos modos distintos, por medio de funciones comunes y por medio del paradigma orientado a objetos. Por eso veremos dos alternativas de trabajo en este artículo.

Construir fechas

Es posible construir objetos de la clase DateTime mediante el constructor de la clase fecha.

$fecha = new DateTime("2022-02-18");

Los formatos de entrada soportados para la fecha pueden ser diversos. Ahora veremos incliso cómo puedes crear tus propios formatos personalizados. Pero es importante saber que si el formato indicado no es admitido se levantaría una excepción que necesitaríamos tratar.

try {
    $fecha = new DateTime("2022 02 18");
} catch(Exception $e) {
    echo 'Fecha mal construida: ' . $e->getMessage();
}

Suele ser incómodo tratar con excepciones, por lo que es posible que nos resulte más útil crear fechas invocando el método "createFromFormat". Este método nos permite entregar la fecha de entrada en cualquier otro formato que necesitemos.

$fecha = DateTime::createFromFormat("Y m d", "2022 02 18");

Los caracteres de control para crear los formatos personalizados los encontramos en la propia documentación de createFromFormat. Además, podemos encontrar mayores explicaciones sobre este mecanismo en el artículo Crear y convertir fechas en PHP.

Construir fechas en PHP con funciones

Si la programación orientada a objetos nos despista, PHP también ofrece este API de trabajo con fechas usando funciones de toda la vida.

Los mismos ejemplos que hemos visto antes podemos escribirlos de este otro modo.

Creación de la fecha:

$fecha = date_create("2022-02-18");

Creación de la fecha a partir de un formato personalizado.

$fecha = date_create_from_format("Y m d", "2022 02 18");

Operar con fechas en PHP

Una vez que tenemos objetos fecha (DateTime), podemos realizar operaciones con ellos para conseguir todos los comportamientos que sean necesarios.

Lo más típico sería mostrar la fecha con cualquier formato deseado. Para ello usamos el método format() o la función date_format(), que es lo mismo en realidad, dependiendo de si preferimos trabajar con el objeto directamente o preferimos el estilo de funciones.

$fecha->format('d/m/Y');

Sería equivalente a:

date_format($fecha, 'd/m/Y');

Observaremos que la clase DateTime tiene un conjunto de métodos para conseguir operar con fechas y hacer trabajos habituales, como por ejemplo añadir o restar días, semanas o meses, a una fecha.

Por ejemplo, añadimos intervalos de tiempo usando el método add(). Así añadimos un día a la fecha que teníamos antes.

$fecha->add(new DateInterval('P1D'));

Este código sería equivalente:

$fecha->add(DateInterval::createFromDateString('1 day'));

Quizás coincidas con nosotros que este código no resulta del todo intuitivo. Requeriría algunas explicaciones y estudio para poder entenderlo. Por ello es muy común que cuando trabajamos con fechas en PHP acabemos usando alguna librería extra como la que vamos a ver a continuación.

Puedes ver muchas otras funciones de fecha en la documentación de PHP.

Librería Carbon para trabajo con fechas en PHP

Carbon es una de esas librerías que cuando te familiarizas con ellas no quieres volver a trabajar sin su ayuda. Sirve para hacer todo tipo de tratamientos y cálculos con fechas y horas, pero de una manera sencilla e intuitiva.

Quizás necesites realizar cosas complejas con fechas, como calcular el número de días minutos y segundos entre dos fechas cualquiera, o cosas simples como añadir meses o años a una fecha. Para ambos casos, posiblemente necesites invertir una cantidad de tiempo en leer la documentación de PHP para conseguir el método correcto, o simplemente googlear para encontrar una solución ya publicada por otro desarrollador. Sin embargo, si conoces Carbon lo tendrás mucho más fácil.

Carbon tiene innumerables métodos de crear una fecha y por supuesto para operar con ellas.

Por ejemplo, podemos crear la fecha del instante actual con:

$ahora = Carbon::now();

Pero si quieres la fecha de hoy a las 00:00:00, entonces usas:

$hoy = Carbon::today();

Si se trata de la fecha de ayer sería:

$ayer = Carbon::yesterday();

Para crear fechas personalizadas es muy cómodo usar este otro método:

$fecha = Carbon::createFromDate(2022, 2, 18);

Incluso puedes trabajar cómodamente con zonas horarias específicas:

$fecha = Carbon::createFromDate(2022, 2, 18, 'Europe/Madrid');

Por supuesto, podemos crear un objeto Carbon usando un formato de entrada totalmente personalizado.

Carbon::createFromFormat('Y-m-d', '2022-02-18')

Son solamente unos pocos ejemplos para que veamos la variedad de métodos que tenemos disponibles para generar fechas.

Luego, trabajar con fechas usando Carbon es muy sencillo. Simplemente tenemos que partir de un objeto Carbon creado con cualquiera de sus métodos y hacer uso de sus variados métodos.

Por ejemplo, podemos añadir una cantidad de días a una fecha así:

$fecha->addDays(15);

O restar meses así:

$fecha->subMonths(2);

Otro ejemplo muy útil de Carbon es la posibilidad de mostrar la diferencia de una fecha con respecto a otra en un formato de fácil lectura.

Carbon::now()->subDays(10)->diffForHumans();   

Esto te devolvería algo como "hace 10 días". Claro que necesitarás localizarlo al español para que te lo diga en nuestro idioma, lo que resulta también muy sencillo.

Carbon::now()->addDays(220)->locale('es_ES');

Cómo usar Carbon para tratamientos de fechas

Para usar la librería Carbon tienes que instalarla en tu aplicación vía Composer. Si usas un framework como Laravel o Symfony no necesitarás hacerlo, pero si tu aplicación es PHP "a pelo", entonces te tocará instalarla a mano.

No es complicado y puedes aprender Composer en este manual. Una vez hayas instalado Composer, tienes que incluir Carbon como dependencia con este comando:

composer require nesbot/carbon

Ahora que tienes Carbon instalado en el proyecto, se trata simplemente de hacer el require del autoload de composer, tal como se explica en el mencionado manual de Composer.

require 'vendor/autoload.php';

A continuación tienes que usar el espacio de nombres de Carbon, con esta sentencia de PHP al principio de tu archivo:

use Carbon\Carbon;

Usar una fachada para trabajar con Carbon

Ya para finalizar, quiero recomendarte que cuando uses Carbon te realices tu propia clase que se encargue de proporcionar una interfaz sencilla para ti para usar los métodos que necesites de Carbon.

Yo generalmente tengo una clase Date personal que tiene todas las funciones que generalmente uso, como por ejemplo crear una fecha a partir de un campo "date de MySQL", o crear una fecha en formato español, formato inglés, etc.

Esto te permite mantener centralizado todo el trabajo con fechas de tu aplicación en un único archivo, lo que tiene varias ventajas:

Esta recomendación no es más que un patrón de diseño conocido como "fachada".

Conclusión

En este artículo hemos realizado un análisis general de las posibilidades que tienes para el tratamiento de fechas en PHP. Es un tema amplio, ya que existen miles de posibilidades en el trabajo con fechas. A menudo realizar cálculos con fecha es una tarea compleja, pero ayudado de librerías como Carbon es todo mucho más sencillo.

En el siguiente artículo de este manual veremos unos ejercicios prácticos habituales en las aplicaciones, como es la conversión entre formatos de fechas. Una buena ocasión para seguir aprendiendo y practicando sobre el uso de fechas en PHP.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual