W3docs

Manipulación de fechas y horas en PHP

PHP es un lenguaje de programación del lado del servidor ampliamente usado para crear páginas web dinámicas. Aprende a manipular fechas y horas con sus funciones.

PHP es un popular lenguaje de programación del lado del servidor ampliamente utilizado para crear páginas web dinámicas. Una de las características más importantes de PHP es su capacidad para manipular fechas y horas. En este artículo exploraremos las distintas funciones de manipulación de fechas y horas disponibles en PHP y cómo pueden utilizarse para simplificar tu proceso de codificación.

Comprensión de fechas y horas en PHP

Antes de adentrarnos en las diversas funciones disponibles en PHP para manipular fechas y horas, conviene entender cómo PHP gestiona las fechas y los tiempos. En PHP, las fechas y horas se representan como string. El formato más común para representar una fecha es YYYY-MM-DD, mientras que el formato más común para representar una hora es HH:MM:SS.

PHP también proporciona una función integrada llamada date() que puede utilizarse para dar formato a fechas y horas de muy diversas maneras. La función date() recibe dos argumentos: una cadena de formato y una marca de tiempo. La cadena de formato especifica el formato deseado de la fecha y la hora, mientras que la marca de tiempo indica el tiempo que debe formatearse.

Agregar tiempo a fechas en PHP

La función date() se usa principalmente para dar formato a marcas de tiempo en cadenas legibles. Para sumar o restar intervalos de tiempo a una fecha, PHP proporciona la clase DateTime junto con su método add(). La función procedural date_add() (que da nombre a este capítulo) es un alias heredado de DateTime::add(), pero se recomienda utilizar el enfoque orientado a objetos.

A continuación se muestra un ejemplo de cómo agregar un día a una fecha determinada usando DateTime::add():

php— editable, runs on the server

En este ejemplo, creamos un objeto DateTime a partir de la cadena de fecha inicial. Luego usamos el método add() con un objeto DateInterval (P1D representa un período de 1 día) para modificar la fecha. Por último, formateamos y mostramos la fecha actualizada.

Comprensión del formato DateInterval

La cadena que se pasa a DateInterval sigue el formato de duración ISO 8601. Siempre comienza con la letra P (de "period"). Las partes de fecha van primero; luego, un separador opcional T introduce las partes de hora:

CódigoSignificado
Yaños
Mmeses (antes de T)
Ddías
Tseparador antes de las partes de hora
Hhoras
Mminutos (después de T)
Ssegundos

Así, P1Y2M10DT2H30M significa "1 año, 2 meses, 10 días, 2 horas y 30 minutos". Ten en cuenta que M significa meses antes de la T y minutos después de ella — esta es una fuente habitual de errores.

<?php

$date = new DateTime('2022-01-01 00:00:00');
$date->add(new DateInterval('P1Y2M10DT2H30M'));
echo $date->format('Y-m-d H:i:s');
?>

add() muta el objeto original

DateTime::add() modifica el objeto en su lugar en lugar de devolver uno nuevo. Si necesitas conservar la fecha original, utiliza DateTimeImmutable, que devuelve un objeto nuevo en cada operación:

<?php

$start = new DateTimeImmutable('2022-03-02');
$next  = $start->add(new DateInterval('P1D'));

echo $start->format('Y-m-d'), "\n"; // unchanged
echo $next->format('Y-m-d'), "\n";  // one day later
?>

Restar tiempo a fechas

Para retroceder una fecha, utiliza el método DateTime::sub() con un DateInterval. Funciona exactamente igual que add() pero en sentido inverso:

<?php

$date = new DateTime('2022-03-02');
$date->sub(new DateInterval('P1M')); // subtract one month
echo $date->format('Y-m-d');
?>

Calcular la diferencia entre fechas

Para conocer la distancia entre dos fechas, usa DateTime::diff() (alias procedural date_diff()). Devuelve un DateInterval que puedes formatear:

<?php

$a = new DateTime('2022-01-01');
$b = new DateTime('2022-03-02');
$diff = $a->diff($b);
echo $diff->format('%a days'); // total days between the two dates
?>

Otras funciones de manipulación de fechas y horas en PHP

Además de DateTime::add(), PHP ofrece varias funciones más para trabajar con fechas y horas. Entre ellas se incluyen:

  • strtotime(): Analiza una descripción textual de fecha y hora en inglés y la convierte en una marca de tiempo Unix
  • time(): Devuelve la marca de tiempo Unix actual
  • mktime(): Devuelve la marca de tiempo Unix para una fecha y hora determinadas
  • date_modify(): Modifica un objeto DateTime usando un formato relativo textual (p. ej., +1 day)
  • date_sub(): Alias procedural heredado de DateTime::sub()
  • date_diff(): Calcula la diferencia entre dos objetos DateTime

Usar estas funciones junto con los métodos de DateTime puede ayudarte a gestionar de manera eficiente diversas operaciones con fechas y horas.

Conclusión

En este artículo hemos explorado cómo manipular fechas y horas en PHP. Aclaramos que la función date() se usa para dar formato, mientras que para sumar o restar tiempo lo más recomendable es usar el método DateTime::add(). También revisamos otras funciones útiles como strtotime(), mktime() y date_diff(), y señalamos que date_add() es un alias procedural heredado. Utilizar estas herramientas correctamente te ayudará a gestionar las operaciones de fecha y hora de forma fiable en tus aplicaciones PHP.

Práctica

Práctica
¿Qué hace la función date_add() en PHP?
¿Qué hace la función date_add() en PHP?
Was this page helpful?