Cómo calcular y modificar fechas en PHP

Resumen

Trabajar con fechas en PHP se vuelve mucho más potente cuando dominas la clase DateTime y sus métodos asociados. Con ella puedes calcular diferencias entre fechas, crear objetos de fecha desde formatos legibles para humanos y modificar días, meses o años con una sola línea de código.

Esta guía está pensada para quien ya conoció funciones básicas de fecha en PHP y ahora quiere manipular el tiempo con flexibilidad real, usando programación orientada a objetos.

¿Cómo calcular la diferencia de tiempo entre dos fechas en PHP?

Para calcular cuánto tiempo ha pasado entre dos momentos necesitas dos timestamps representados como objetos DateTime. La razón es simple: si solo quieres imprimir la fecha usas la función date(), pero si quieres manipularla, debes instanciar la clase.

php $today = new DateTime(); $mistermichi_birth = new DateTime('2020-03-25'); $interval = $mistermichi_birth->diff($today);

El método diff() no devuelve un número plano, devuelve un objeto de tipo DateInterval. Y aquí viene lo interesante: ese objeto te permite hacer muchas operaciones, no solo leer el resultado.

¿Qué es un DateInterval en PHP? Es un objeto que representa el tiempo que separa a dos fechas. Como es un objeto, no se imprime directamente: necesitas su método format() para convertirlo en una cadena legible.

Para mostrar el intervalo, usas format() con marcadores precedidos por %. Por ejemplo, %y te da los años sin ceros y %d los días sin ceros.

php echo $interval->format('%y years with %d days');

El resultado será algo como “2 years with 25 days”, exactamente la diferencia entre la fecha de nacimiento y hoy.

¿Cómo crear una fecha desde un formato legible con createFromFormat?

A veces recibes fechas escritas como las leería una persona, por ejemplo Sunday April 17 2022, y necesitas convertirlas en un objeto manipulable. Para eso existe el método estático DateTime::createFromFormat().

La clave está en decirle a PHP, carácter por carácter, cuál es el formato que estás pasando. Cada parte de la fecha tiene un código en la documentación oficial:

  • l (L minúscula) para el nombre completo del día, como Sunday.
  • j para el número del día sin ceros a la izquierda, de 1 a 31.
  • F para el nombre completo del mes, como April.
  • Y (Y mayúscula) para el año con cuatro dígitos.

php $date = DateTime::createFromFormat('l F j Y', 'Sunday April 17 2022'); echo $date->format('Y-m-d H:i:s');

Lo que hace PHP es descifrar tu cadena humana usando el patrón que tú definiste y devolverte un objeto DateTime listo para manipular. A partir de ahí puedes sumarle tiempo, restarle tiempo o transformarlo a cualquier formato.

¿Por qué usar DateTime en lugar de la función date? Porque date() solo imprime, mientras que la clase DateTime te permite manipular la fecha: sumar días, restar meses, calcular diferencias y reformatear cuando quieras.

¿Cómo modificar una fecha en PHP con el método modify?

El método modify() es probablemente el más práctico cuando necesitas mover una fecha hacia adelante o hacia atrás en el tiempo. Funciona con expresiones en lenguaje natural en inglés.

php $date = new DateTime(); $date->modify('+1 day +2 months'); echo $date->format('Y-m-d');

Si hoy es 19 de abril de 2022, ese código devuelve 2022-06-20: un día más y dos meses adelante. Y también puedes ir hacia atrás:

php $date->modify('-1 year');

Eso te lleva a 2021-04-19. Sumar, restar, mover meses completos: todo cabe en una línea.

¿Qué hace el método modify de DateTime? Modifica el objeto fecha sumando o restando intervalos expresados en texto, como +1 day, -2 months o +1 year. El cambio se aplica directamente sobre el objeto.

¿Por qué siempre necesitas format al imprimir fechas en PHP?

Tanto DateTime como DateInterval son objetos. PHP no puede imprimir un objeto directamente con echo, así que ambos exponen un método format() que convierte ese objeto en una cadena legible.

Esa es la lógica detrás de toda la manipulación de fechas en PHP orientada a objetos:

  • Instancias DateTime para tener una fecha manipulable.
  • Usas métodos como diff(), modify() o createFromFormat() para transformarla.
  • Llamas a format() al final para imprimirla como string.

Si entiendes ese flujo, el resto se vuelve intuitivo. La clase DateTime es la pieza central, y cada método cumple una función específica sobre ella. Practica con tus propias fechas y verás que en poco tiempo manipular el tiempo en PHP deja de ser confuso.

¿Qué tipo de cálculos con fechas estás haciendo en tus proyectos? Cuéntalo en los comentarios.