PHP

PHP

Tutorial PHP: Manejo de fechas y tiempo

PHP: Explora el manejo de fechas con la clase DateTime. Aprende a crear, modificar y comparar fechas eficientemente. Tutorial actualizado 2023.

Aprende PHP GRATIS y certifícate

Uso de la clase DateTime

La clase DateTime en PHP proporciona una interfaz orientada a objetos para manipular fechas y horas de manera eficiente y flexible. Al utilizar esta clase, es posible crear, modificar y formatear fechas y tiempos de forma más intuitiva que con las funciones procedimentales tradicionales.

Para crear una nueva instancia de DateTime, se puede utilizar el constructor sin parámetros para obtener la fecha y hora actuales, o pasar una cadena de fecha específica:

<?php
// Fecha y hora actuales
$fechaActual = new DateTime();

// Fecha y hora específicas
$fechaEspecifica = new DateTime('2024-05-15 08:30:00');

Es posible especificar una zona horaria al crear el objeto DateTime utilizando el objeto DateTimeZone:

<?php
// Fecha actual en zona horaria específica
$zonaHoraria = new DateTimeZone('Europe/Madrid');
$fechaMadrid = new DateTime('now', $zonaHoraria);

La clase DateTime ofrece métodos para formatear fechas según distintos patrones. El método format() permite convertir el objeto DateTime a una cadena con el formato deseado:

<?php
$fecha = new DateTime('2024-05-15 08:30:00');
echo $fecha->format('d/m/Y H:i'); // Resultado: 15/05/2024 08:30

Además, DateTime permite modificar fechas mediante métodos como modify() o add() y sub(), que aceptan intervalos de tiempo o DateInterval:

<?php
$fecha = new DateTime('2024-05-15');
$fecha->modify('+1 month');
echo $fecha->format('Y-m-d'); // Resultado: 2024-06-15

$intervalo = new DateInterval('P10D'); // Periodo de 10 días
$fecha->add($intervalo);
echo $fecha->format('Y-m-d'); // Resultado: 2024-06-25ç

Es posible acceder a componentes específicos de la fecha utilizando los métodos setDate() y setTime(), o recuperar esos valores con los métodos format() y propiedades del objeto:

<?php
$fecha = new DateTime('2024-05-15 08:30:00');
$fecha->setDate(2025, 12, 31);
$fecha->setTime(23, 59, 59);
echo $fecha->format('Y-m-d H:i:s'); // Resultado: 2025-12-31 23:59:59

La conversión a timestamp Unix se logra con el método getTimestamp(), y es posible crear un DateTime a partir de un timestamp usando setTimestamp():

<?php
$fecha = new DateTime();
$timestamp = $fecha->getTimestamp();
echo $timestamp; // Resultado: 1735689599

$nuevaFecha = new DateTime();
$nuevaFecha->setTimestamp(1735689599);
echo $nuevaFecha->format('Y-m-d H:i:s'); // Resultado: 2025-12-31 23:59:59

La comparación de fechas es sencilla utilizando los operadores de comparación estándar, ya que la clase DateTime implementa los métodos mágicos __wakeup() y __sleep():

<?php
$fecha1 = new DateTime('2024-05-15');
$fecha2 = new DateTime('2025-12-31');

if ($fecha1 < $fecha2) {
    echo "La fecha1 es anterior a fecha2.\n";
}

La inmutabilidad es otra característica útil. La clase DateTimeImmutable ofrece la misma funcionalidad que DateTime, pero los métodos de modificación retornan nuevos objetos en lugar de modificar el existente:

<?php
$fecha = new DateTimeImmutable('2024-05-15');
$nuevaFecha = $fecha->modify('+1 month');
echo $fecha->format('Y-m-d'); // Resultado: 2024-05-15
echo $nuevaFecha->format('Y-m-d'); // Resultado: 2024-06-15

Para calcular diferencias entre fechas, se utiliza el método diff(), que devuelve un objeto DateInterval con la diferencia:

<?php
$fechaInicio = new DateTime('2024-05-15');
$fechaFin = new DateTime('2025-12-31');
$diferencia = $fechaInicio->diff($fechaFin);
echo $diferencia->format('%y años, %m meses, %d días'); // Resultado: 1 años, 7 meses, 16 días

La clase DateTime proporciona una forma potente y flexible de trabajar con fechas y horas en PHP, facilitando tareas comunes como el formateo, modificación y comparación de fechas.

Formateo y manipulación de fechas

La clase DateTime ofrece múltiples métodos para el formateo y manipulación de fechas de manera precisa y adaptable. Para presentar las fechas en distintos formatos, se utiliza principalmente el método format(), pero también existen funciones específicas para crear fechas a partir de formatos definidos.

Es común necesitar convertir cadenas de texto con formatos específicos en objetos DateTime. Para ello, se emplea el método createFromFormat(), que permite especificar el formato de entrada de la cadena:

<?php
$formatoEntrada = 'd/m/Y H:i';
$fechaStr = '15/05/2024 08:30';
$fecha = DateTime::createFromFormat($formatoEntrada, $fechaStr);
echo $fecha->format('Y-m-d H:i:s'); // Resultado: 2024-05-15 08:30:00

Es importante manejar correctamente los errores de parsing al crear fechas a partir de cadenas. El método getLastErrors() proporciona información detallada sobre posibles errores al interpretar una fecha:

<?php
$fechaStr = '31/02/2024 08:30';
$fecha = DateTime::createFromFormat('d/m/Y H:i', $fechaStr);
$errores = DateTime::getLastErrors();
if ($errores['warning_count'] > 0 || $errores['error_count'] > 0) {
    echo "Se han detectado errores al parsear la fecha.\n";
}

Para manipular fechas de manera avanzada, se pueden utilizar objetos DateInterval combinados con los métodos add() y sub(). Los intervalos permiten especificar periodos de tiempo complejos:

<?php
$fecha = new DateTime('2024-05-15');
$intervalo = new DateInterval('P1Y2M10D'); // 1 año, 2 meses y 10 días
$fecha->add($intervalo);
echo $fecha->format('Y-m-d'); // Resultado: 2025-07-25

Además de agregar o restar intervalos, se puede calcular la diferencia exacta entre dos fechas utilizando el método diff() y obtener componentes específicos del intervalo resultante:

<?php
$fechaInicio = new DateTime('2024-05-15');
$fechaFin = new DateTime('2025-07-20');
$diferencia = $fechaInicio->diff($fechaFin);
echo 'Han transcurrido ' . $diferencia->days . ' días.' . "\n";
echo "Equivalente a $diferencia->y años, $diferencia->m meses y $diferencia->d días.\n";

La manipulación de fechas también incluye operaciones como establecer la hora al inicio o fin del día. Para ello, se pueden utilizar métodos como setTime() o modify() con parámetros específicos:

<?php
$fecha = new DateTime('2024-05-15 15:45:00');
$fecha->setTime(0, 0, 0);
echo $fecha->format('Y-m-d H:i:s'); // Resultado: 2024-05-15 00:00:00

$fecha->modify('last day of this month');
echo $fecha->format('Y-m-d'); // Resultado: 2024-05-31

Al utilizar cadenas relativas en el método modify(), es posible ajustar fechas de manera intuitiva y flexible. Por ejemplo, para obtener el próximo lunes:

<?php
$fecha = new DateTime('now');
$fecha->modify('next Monday');
echo $fecha->format('Y-m-d'); // Muestra la fecha del siguiente lunes

Para formatear fechas según la configuración regional, se puede hacer uso de la clase IntlDateFormatter disponible a través de la extensión intl. Esto permite mostrar fechas en un formato localizado y en distintos idiomas:

<?php
$formatter = new IntlDateFormatter('es_ES', IntlDateFormatter::FULL, IntlDateFormatter::NONE);
$fecha = new DateTime('2024-05-15');
echo $formatter->format($fecha); // Resultado: miércoles, 15 de mayo de 2024

Otra característica útil es el manejo de fechas recurrentes o períodos. La clase DatePeriod permite iterar sobre intervalos de fechas, lo cual es útil para generar series de fechas:

<?php
$inicio = new DateTime('2024-05-15');
$intervalo = new DateInterval('P1W'); // Cada semana
$fin = new DateTime('2024-06-30');
$periodo = new DatePeriod($inicio, $intervalo, $fin);

foreach ($periodo as $fecha) {
    echo $fecha->format('Y-m-d') . "\n";
}

Es frecuente necesitar comparar fechas sin tener en cuenta la hora. Para ello, se puede normalizar la hora de los objetos DateTime o utilizar el método format() para comparar las cadenas resultantes:

<?php
$fecha1 = new DateTime('2024-05-15 08:30:00');
$fecha2 = new DateTime('2024-05-15 15:45:00');

if ($fecha1->format('Y-m-d') == $fecha2->format('Y-m-d')) {
    echo "Las fechas ocurren el mismo día.\n";
}

Para operaciones aritméticas más complejas con fechas, es posible combinar las distintas herramientas proporcionadas por PHP, asegurando así un manejo preciso y eficiente de datos temporales.

Zonas horarias y ajustes locales

El manejo de zonas horarias es fundamental al trabajar con fechas y horas en aplicaciones que operan en diferentes regiones geográficas. PHP proporciona herramientas robustas para gestionar y convertir fechas entre distintas zonas horarias, asegurando así una correcta sincronización temporal.

Para establecer la zona horaria predeterminada de la aplicación, se utiliza la función date_default_timezone_set(). Esto afecta a todas las funciones de fecha y hora que dependan de la zona horaria del sistema:

<?php
date_default_timezone_set('Europe/Madrid');
$fechaActual = new DateTime();
echo $fechaActual->format('Y-m-d H:i:s'); // Fecha y hora en la zona horaria de Madrid

Es posible obtener la zona horaria predeterminada actual mediante date_default_timezone_get():

<?php
$zonaHorariaActual = date_default_timezone_get();
echo "La zona horaria actual es $zonaHorariaActual\n";

La clase DateTimeZone permite trabajar con zonas horarias específicas al crear objetos DateTime. Al pasar un objeto DateTimeZone como segundo parámetro al constructor de DateTime, se especifica la zona horaria deseada:

<?php
$zonaNuevaYork = new DateTimeZone('America/New_York');
$fechaNuevaYork = new DateTime('now', $zonaNuevaYork);
echo $fechaNuevaYork->format('Y-m-d H:i:s'); // Fecha y hora en Nueva York

Para convertir fechas entre zonas horarias, se utiliza el método setTimezone(), que ajusta la fecha y hora al nuevo huso horario:

<?php
$fechaUTC = new DateTime('now', new DateTimeZone('UTC'));
echo 'Hora UTC: ' . $fechaUTC->format('Y-m-d H:i:s') . "\n";

$zonaTokio = new DateTimeZone('Asia/Tokyo');
$fechaUTC->setTimezone($zonaTokio);
echo "Hora en Tokio: " . $fechaUTC->format('Y-m-d H:i:s') . "\n";

Es importante tener en cuenta los cambios de horario de verano y ajustes locales. Las zonas horarias en PHP consideran automáticamente estos cambios gracias a la base de datos de zonas horarias (tz database). Por ello, al utilizar zonas horarias específicas, los cálculos de tiempo reflejan correctamente estos ajustes.

Para obtener una lista de todas las zonas horarias disponibles, se puede utilizar la función timezone_identifiers_list():

<?php
$zonas = timezone_identifiers_list();
foreach ($zonas as $zona) {
    echo "$zona\n";
}

Al trabajar con aplicaciones multilingües o que requieren ajustes regionales específicos, es útil configurar la localización utilizando setlocale(). Esto afecta al formateo y representación de fechas, números y otros elementos culturalmente sensibles:

<?php
setlocale(LC_TIME, 'es_ES.UTF-8');
$fecha = new DateTime('2024-05-15');
echo strftime('%A, %d de %B de %Y', $fecha->getTimestamp()); // Muestra la fecha en formato español

Es importante señalar que strftime() está depreciada a partir de PHP 8.1. En su lugar, se recomienda utilizar la clase IntlDateFormatter de la extensión intl, que ofrece funcionalidades avanzadas de internacionalización:

<?php
$formatter = new IntlDateFormatter('es_ES', IntlDateFormatter::FULL, IntlDateFormatter::NONE);
$fecha = new DateTime('2024-05-15');
echo $formatter->format($fecha); // Resultado: miércoles, 15 de mayo de 2024

Para aplicaciones que manejan usuarios en diferentes regiones, es fundamental almacenar las fechas en una zona horaria estándar, como UTC, y convertirlas al huso horario del usuario cuando sea necesario. Esto evita discrepancias y facilita el manejo de fechas almacenadas:

<?php
// Almacenar fecha en UTC
$fechaEvento = new DateTime('2024-05-15 14:00:00', new DateTimeZone('UTC'));
$timestamp = $fechaEvento->getTimestamp();

// Convertir al huso horario del usuario
$zonaUsuario = new DateTimeZone('Europe/London');
$fechaEvento->setTimezone($zonaUsuario);
echo "El evento es a las " . $fechaEvento->format('H:i') . " hora local.\n";

El uso coherente de zonas horarias y ajustes locales garantiza que las fechas y horas sean precisas y significativas para los usuarios, independientemente de su ubicación geográfica. Además, es esencial considerar la compatibilidad y adoptar prácticas recomendadas para evitar problemas asociados con el manejo de tiempos y zonas horarias.

Cálculos con fechas

Los cálculos con fechas son esenciales en muchas aplicaciones para determinar intervalos, programar eventos o procesar datos temporales. PHP proporciona herramientas robustas para realizar estos cálculos de manera precisa y eficiente utilizando la clase DateTime, combinada con DateInterval y otras funciones.

Para calcular la diferencia entre dos fechas en términos de días, horas, minutos o segundos, se utiliza el método diff(), que devuelve un objeto DateInterval:

<?php
$fechaInicio = new DateTime('2024-05-15 08:30:00');
$fechaFin = new DateTime('2024-05-20 14:45:00');
$diferencia = $fechaInicio->diff($fechaFin);
echo "Intervalo: " . $diferencia->format('%d días, %h horas, %i minutos') . "\n";
// Resultado: Intervalo: 5 días, 6 horas, 15 minutos

Para obtener el número total de días entre dos fechas, se puede acceder a la propiedad days del objeto DateInterval:

<?php
$fechaInicio = new DateTime('2024-01-01');
$fechaFin = new DateTime('2024-12-31');
$diferencia = $fechaInicio->diff($fechaFin);
echo 'Total de días: ' . $diferencia->days . "\n";
// Resultado: Total de días: 365

Al realizar sumas o restas de intervalos a una fecha, es importante considerar cómo afectan los diferentes componentes de tiempo. Por ejemplo, para agregar meses a una fecha, se utiliza el método add() con un objeto DateInterval:

<?php
$fecha = new DateTime('2024-01-31');
$intervalo = new DateInterval('P1M');
$fecha->add($intervalo);
echo $fecha->format('Y-m-d') . "\n";
// Resultado: 2024-02-29 (considerando año bisiesto)

Es crucial tener en cuenta que al agregar un mes a una fecha como el 31 de enero, el resultado será el último día del mes siguiente si este tiene menos días, gracias al ajuste automático que realiza DateTime.

Para calcular la edad de una persona a partir de su fecha de nacimiento, se puede utilizar el método diff():

<?php
$fechaNacimiento = new DateTime('1990-05-15');
$fechaActual = new DateTime('now');
$edad = $fechaNacimiento->diff($fechaActual);
echo "Edad: " . $edad->y . " años.\n";
// Resultado: Edad: 34 años

En aplicaciones empresariales, a menudo es necesario calcular días hábiles excluyendo fines de semana y festivos. Para ello, se puede utilizar un bucle que incremente la fecha y verifique si cada día es laborable:

<?php
function calcularDiasHabiles($fechaInicio, $fechaFin, $festivos = []) {
    $diasHabiles = 0;
    $periodo = new DatePeriod($fechaInicio, new DateInterval('P1D'), $fechaFin);
    foreach ($periodo as $fecha) {
        if ($fecha->format('N') < 6 && !in_array($fecha->format('Y-m-d'), $festivos)) {
            $diasHabiles++;
        }
    }
    return $diasHabiles;
}

$fechaInicio = new DateTime('2024-05-01');
$fechaFin = new DateTime('2024-05-31');
$festivos = ['2024-05-15']; // Array de fechas festivas
$dias = calcularDiasHabiles($fechaInicio, $fechaFin, $festivos);
echo "Días hábiles: $dias\n";
// Resultado: Días hábiles: 21

En este ejemplo, la función calcularDiasHabiles() recorre cada día entre las fechas dadas y verifica si es un día laborable utilizando el formato 'N', donde 6 y 7 corresponden al sábado y domingo.

Para operaciones con horarios, como calcular el tiempo transcurrido en horas y minutos entre dos momentos, se puede hacer lo siguiente:

<?php
$horaEntrada = new DateTime('2024-05-15 08:00:00');
$horaSalida = new DateTime('2024-05-15 17:30:00');
$intervalo = $horaEntrada->diff($horaSalida);
$totalHoras = $intervalo->h + ($intervalo->i / 60);
echo "Horas trabajadas: $totalHoras\n";
// Resultado: Horas trabajadas: 9.5

Si el cálculo abarca varios días, se puede obtener el total de horas incluyendo los días:

<?php
$inicio = new DateTime('2024-05-15 08:00:00');
$fin = new DateTime('2024-05-17 17:00:00');
$intervalo = $inicio->diff($fin);
$totalHoras = ($intervalo->days * 24) + $intervalo->h + ($intervalo->i / 60);
echo "Horas totales: $totalHoras\n";
// Resultado: Horas totales: 57

Para manejar fechas recurrentes, como eventos que ocurren cada cierto periodo, se utiliza la clase DatePeriod:

<?php
$inicio = new DateTime('2024-05-01');
$intervalo = new DateInterval('P1W'); // Cada semana
$repeticiones = 5;
$periodo = new DatePeriod($inicio, $intervalo, $repeticiones);

foreach ($periodo as $fecha) {
    echo 'Evento el ' . $fecha->format('Y-m-d') . "\n";
}
// Muestra 5 fechas semanales a partir del 2024-05-01

En cálculos financieros, es común necesitar el número de semanas o meses entre dos fechas. Esto se puede lograr utilizando las funciones adecuadas:

<?php
$fechaInicio = new DateTime('2024-01-01');
$fechaFin = new DateTime('2024-12-31');
$diferencia = $fechaInicio->diff($fechaFin);
echo 'Semanas totales: ' . floor($diferencia->days / 7) . "\n";
echo 'Meses totales: ' . ($diferencia->y * 12 + $diferencia->m) . "\n";
// Resultado: Semanas totales: 52
// Resultado: Meses totales: 12

Al trabajar con zonas horarias diferentes en cálculos, es fundamental asegurarse de que las fechas están en la misma zona horaria para evitar errores:

<?php
$fechaUTC = new DateTime('2024-05-15 12:00:00', new DateTimeZone('UTC'));
$fechaMadrid = new DateTime('2024-05-15 14:00:00', new DateTimeZone('Europe/Madrid'));

$diferencia = $fechaUTC->diff($fechaMadrid);
echo 'Diferencia horaria: ' . $diferencia->format('%h horas') . "\n";
// Resultado: Diferencia horaria: 0 horas

Sin embargo, aunque las horas parecen diferentes, al estar en zonas horarias distintas, el tiempo real transcurrido es cero, lo que muestra la importancia de considerar las zonas horarias en los cálculos.

Para calcular si una fecha cae en un fin de semana, se puede utilizar el formato 'N':

<?php
$fecha = new DateTime('2024-05-18'); // Sábado
if ($fecha->format('N') >= 6) {
    echo "La fecha es en fin de semana.\n";
} else {
    echo "La fecha es en día laborable.\n";
}
// Resultado: La fecha es en fin de semana.

Cuando se requiere encontrar la próxima fecha disponible según ciertas condiciones, como el siguiente día laborable, se puede emplear un ciclo que incremente la fecha hasta cumplir la condición:

<?php
$fecha = new DateTime('2024-05-17'); // Viernes
while ($fecha->format('N') >= 6) {
    $fecha->modify('+1 day');
}
echo 'El próximo día laborable es ' . $fecha->format('Y-m-d') . "\n";
// Resultado: El próximo día laborable es 2024-05-20

Para cálculos más complejos, como la determinación de semanas ISO, se utiliza el formato 'W' en conjunto con el año ISO 'o':

<?php
$fecha = new DateTime('2024-12-31');
echo 'Semana ISO: ' . $fecha->format('o-W') . "\n";
// Resultado: Semana ISO: 2025-01

Esto es útil en contextos donde se sigue el estándar ISO 8601 para numeración de semanas.

Los calendarios especiales o cálculos en base a calendarios no gregorianos también pueden requerir consideraciones adicionales. Para estos casos, se puede utilizar la extensión intl y la clase IntlCalendar para manejar diferentes sistemas de calendario.

En resumen, los cálculos con fechas en PHP son manejados de forma eficiente mediante la combinación de objetos DateTime, DateInterval y DatePeriod. Es importante comprender cómo interactúan estos componentes y considerar factores como zonas horarias, años bisiestos y ajustes de calendario para obtener resultados precisos.

Para seguir leyendo hazte Plus

¿Ya eres Plus? Accede a la app

20 % DE DESCUENTO

Plan mensual

19.00 /mes

15.20 € /mes

Precio normal mensual: 19 €
58 % DE DESCUENTO

Plan anual

10.00 /mes

8.00 € /mes

Ahorras 132 € al año
Precio normal anual: 120 €
Aprende PHP GRATIS online

Todas las lecciones de PHP

Accede a todas las lecciones de PHP y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Php

PHP

Introducción Y Entorno

Instalación Y Primer Programa De Php

PHP

Introducción Y Entorno

Tipos De Datos, Variables Y Constantes

PHP

Sintaxis

Operadores Y Expresiones

PHP

Sintaxis

Estructuras De Control

PHP

Sintaxis

Funciones Y Llamada De Funciones

PHP

Sintaxis

Cadenas De Texto Y Manipulación

PHP

Sintaxis

Manejo De Números

PHP

Sintaxis

Manejo De Fechas Y Tiempo

PHP

Sintaxis

Manejo De Arrays

PHP

Sintaxis

Introducción A La Poo En Php

PHP

Programación Orientada A Objetos

Clases Y Objetos

PHP

Programación Orientada A Objetos

Constructores Y Destructores

PHP

Programación Orientada A Objetos

Herencia

PHP

Programación Orientada A Objetos

Encapsulación

PHP

Programación Orientada A Objetos

Polimorfismo

PHP

Programación Orientada A Objetos

Interfaces

PHP

Programación Orientada A Objetos

Traits

PHP

Programación Orientada A Objetos

Namespaces

PHP

Programación Orientada A Objetos

Autoloading De Clases

PHP

Programación Orientada A Objetos

Manejo De Errores Y Excepciones

PHP

Programación Orientada A Objetos

Manejo De Archivos

PHP

Programación Orientada A Objetos

Patrones De Diseño

PHP

Programación Orientada A Objetos

Introducción A Los Formularios En Php

PHP

Formularios

Procesamiento De Datos De Formularios

PHP

Formularios

Manejo De Archivos En Formularios

PHP

Formularios

Redirecciones Y Retroalimentación Al Usuario

PHP

Formularios

Formularios Dinámicos Y Separación De Lógica

PHP

Formularios

Introducción A La Persistencia En Php

PHP

Persistencia

Conexión A Bases De Datos

PHP

Persistencia

Consultas Y Operaciones Crud

PHP

Persistencia

Gestión De Transacciones

PHP

Persistencia

Manejo De Errores Y Excepciones En Base De Datos

PHP

Persistencia

Patrones De Acceso A Datos

PHP

Persistencia

Concepto De Sesiones En Php

PHP

Sesiones Y Cookies

Configuración De Sesiones

PHP

Sesiones Y Cookies

Cookies

PHP

Sesiones Y Cookies

Manejo Avanzado De Sesiones Y Cookies

PHP

Sesiones Y Cookies

Principales Vulnerabilidades En Php

PHP

Seguridad

Seguridad En Formularios Y Entrada De Datos

PHP

Seguridad

Protección Frente A Inyección Sql

PHP

Seguridad

Gestión De Contraseñas Y Cifrado

PHP

Seguridad

Seguridad En Sesiones Y Cookies

PHP

Seguridad

Configuraciones De Php Para Seguridad

PHP

Seguridad

Introducción Al Testing En Php

PHP

Testing

Phpunit

PHP

Testing

Cobertura De Código En Testing

PHP

Testing

Test Doubles (Mocks, Stubs, Fakes, Spies)

PHP

Testing

Pruebas De Integración Y Funcionales

PHP

Testing

Accede GRATIS a PHP y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  1. Crear instancias de DateTime y DateTimeZone.
  2. Formatear fechas con format().
  3. Modificar fechas usando modify(), add(), sub().
  4. Comparar fechas y calcular diferencias.
  5. Utilizar DateTimeImmutable para inmutabilidad.
  6. Gestionar zonas horarias y ajustar locales.
  7. Implementar cálculos avanzados con DateInterval y DatePeriod.