Fechas en PHP: funciones vs clases

Resumen

Trabajar con fechas en PHP tiene dos caminos claros: el estilo por procedimientos basado en funciones independientes y el estilo orientado a objetos que usa clases y métodos. Ambos llegan al mismo resultado, pero la legibilidad cambia bastante según cuál elijas, y eso impacta en cómo mantienes tu código a futuro.

¿Por qué elegir entre funciones y programación orientada a objetos en PHP?

PHP nació con un fuerte enfoque en funciones, y para fechas tienes decenas de ellas listas para usar. El problema es que, cuando encadenas varias funciones para una sola tarea, el código empieza a sentirse desconectado: cada línea vive por su cuenta y la lectura se vuelve más densa.

La programación orientada a objetos cambia ese ritmo. Trabajas con un objeto, le aplicas métodos, y la sintaxis te permite ver con claridad sobre qué dato estás operando.

¿Qué diferencia hay entre estilo estructurado y orientado a objetos en PHP? El estilo estructurado usa funciones sueltas como date_create() o date_add(). El orientado a objetos usa clases como DateTime y DateInterval, donde llamas métodos directamente sobre la instancia.

¿Cómo añadir días a una fecha con el estilo por procedimientos?

El objetivo del ejercicio [02:30] es sumar cinco días a la fecha actual. Para lograrlo necesitas tres funciones que trabajan en cadena.

¿Qué funciones necesitas para sumar días en PHP estructurado?

La función central es date_add, que es un alias de DateTime::add. Recibe dos parámetros: un objeto DateTime y un objeto DateInterval. Aquí está el detalle clave: date_add no acepta cualquier cosa, necesita tipos específicos.

  • date_create(): alias de new DateTime(), devuelve una instancia DateTime con la fecha actual si no le pasas argumentos.
  • date_interval_create_from_date_string(): alias de DateInterval, recibe un string como "5 days" y devuelve un DateInterval.
  • date_add(): combina ambos para sumar el intervalo a la fecha.
  • date_format(): alias de DateTime::format, convierte el objeto a una cadena con el formato que tú definas.

¿Cómo se ve el código completo en estilo estructurado?

Este fragmento [09:15] muestra el flujo completo desde crear la fecha hasta imprimirla formateada.

php

<?php $date = date_create(); $interval = date_interval_create_from_date_string("5 days"); date_add($date, $interval); echo date_format($date, "Y-m-d"); Si hoy es 19 de abril, la salida será `2022-04-24`. Funciona, pero fíjate cómo cada línea es una función independiente que recibe y devuelve datos sueltos. No hay un hilo conductor visual que te diga "todo esto pertenece a la misma fecha". ## ¿Cómo hacer lo mismo con programación orientada a objetos? Aquí viene lo interesante: el mismo resultado con menos variables intermedias y una lectura mucho más fluida. Usas la clase `DateTime` directamente y aplicas sus métodos sobre la instancia. php <?php $date = new DateTime(); $interval = DateInterval::createFromDateString("5 days"); $date->add($interval); echo $date->format("Y-m-d"); El resultado es idéntico: `2022-04-24`. Pero observa la diferencia conceptual. En la versión orientada a objetos, `$date` no se vuelve a pasar como argumento; tú llamas `$date->add($interval)` y modificas la misma instancia. El método `format` también pertenece al objeto, no es una función externa. > **¿Qué hace DateInterval en PHP?** Representa un intervalo de tiempo (días, meses, años, horas) que puedes sumar o restar a un objeto *DateTime*. Lo creas con strings descriptivos como `"1 day"`, `"2 weeks"`, `"3 months"` o `"4 years"`. ### ¿Qué ventajas tiene el estilo orientado a objetos? Al revisar ambos códigos uno al lado del otro, las diferencias prácticas saltan a la vista. - Menos llamadas a funciones globales con nombres largos como `date_interval_create_from_date_string`. - La instancia `$date` se modifica con sus propios métodos, lo que mantiene el contexto claro. - La sintaxis con `->` te indica de inmediato sobre qué objeto estás operando. - Es más fácil encadenar operaciones cuando trabajas con varias fechas en paralelo. No es que el estilo estructurado esté mal, simplemente exige más atención cuando el archivo crece. ## ¿Cómo formatear una fecha con date_format y DateTime::format? El formato que pasas como segundo argumento sigue la tabla oficial de PHP. Para `"Y-m-d"` obtienes año con cuatro dígitos, mes con dos y día con dos. Puedes combinarlo con horas, minutos, nombres de día y más, según lo que tu interfaz necesite mostrar. > **¿Qué significa Y-m-d en PHP?** Es un patrón de formato: `Y` da el año en cuatro dígitos, `m` el mes en dos dígitos con cero a la izquierda, y `d` el día en dos dígitos. El resultado se ve como `2022-04-24`. La documentación oficial de PHP lista cada carácter de formato disponible, y consultarla mientras programas es parte del flujo normal. No tienes que memorizarla, basta con saber dónde buscarla. Si llegaste hasta aquí practicando ambos estilos, te invito a comentar cuál te resultó más natural y por qué. ¿Te quedaste con el estructurado o ya estás convencido del orientado a objetos?