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():
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ódigo | Significado |
|---|---|
Y | años |
M | meses (antes de T) |
D | días |
T | separador antes de las partes de hora |
H | horas |
M | minutos (después de T) |
S | segundos |
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 Unixtime(): Devuelve la marca de tiempo Unix actualmktime(): Devuelve la marca de tiempo Unix para una fecha y hora determinadasdate_modify(): Modifica un objetoDateTimeusando un formato relativo textual (p. ej.,+1 day)date_sub(): Alias procedural heredado deDateTime::sub()date_diff(): Calcula la diferencia entre dos objetosDateTime
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.