Clase DateInterval

La clase DateInterval permite trabajar con intervalos de tiempo en PHP. Se utiliza para almacenar la diferencia entre dos fechas o para especificar un intervalo en métodos de trabajo con fechas. El intervalo se crea en un formato especial.

Sintaxis

phpDateInterval::__construct(string $duration)

Formato del intervalo

El formato consiste en la letra P (period) y los elementos:

phpP{y}Y{m}M{d}DT{h}H{m}M{s}S{w}W

En este formato: Y - años, M - meses, D - días, T - separador de tiempo, H - horas, M - minutos, S - segundos, W - semanas.

Antes de estas letras es necesario escribir el valor correspondiente. Por ejemplo, 3Y significará tres años, y 5Y2M denotará 5 años y 2 meses.

Después de la creación, el objeto DateInterval contendrá las siguientes propiedades:

php<?php
  $interval->y  // años
  $interval->m  // meses
  $interval->d  // días
  $interval->h  // horas
  $interval->i  // minutos
  $interval->s  // segundos
  $interval->f  // microsegundos
  $interval->invert // 1 si el intervalo es negativo
  $interval->days // cantidad de días (si se creó mediante diff())
?>

Veamos el funcionamiento del intervalo con ejemplos:

Ejemplo

Creemos un intervalo de 1 hora, 45 minutos y 30 segundos:

php<?php
  $interval = new DateInterval('PT1H45M30S');
  var_dump($interval);
?>

Resultado de ejecutar el código:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 0
  'h' => 1
  'i' => 45
  's' => 30
)

Ejemplo

Creemos un intervalo de 3 semanas y 2 días:

php<?php
  $interval = new DateInterval('P3W2D');
  var_dump($interval);
?>

Resultado de ejecutar el código:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 23
  'h' => 0
  'i' => 0
  's' => 0
)

Ejemplo

Creemos un intervalo de 5 meses, 10 días y 6 horas:

php<?php
  $interval = new DateInterval('P5M10DT6H');
  var_dump($interval);
?>

Resultado de ejecutar el código:

phpDateInterval Object
(
  'y' => 0
  'm' => 5
  'd' => 10
  'h' => 6
  'i' => 0
  's' => 0
)

Ejemplo

Creemos un intervalo de 2 años y 15 minutos:

php<?php
  $interval = new DateInterval('P2YT15M');
  var_dump($interval);
?>

Resultado de ejecutar el código:

phpDateInterval Object
(
  'y' => 2
  'm' => 0
  'd' => 0
  'h' => 0
  'i' => 15
  's' => 0
)

Ejemplo

Creemos un intervalo de 1 día, 12 horas y 30 segundos:

php<?php
  $interval = new DateInterval('P1DT12H30S');
  var_dump($interval);
?>

Resultado de ejecutar el código:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 1
  'h' => 12
  'i' => 0
  's' => 30
)

Ejemplo

Creemos un intervalo negativo de 1 año y 3 meses (intervalo hacia atrás):

php<?php
  $interval = new DateInterval('P1Y3M');
  $interval->invert = 1;
  var_dump($interval);
?>

Resultado de ejecutar el código:

phpDateInterval Object
(
  'y' => 1
  'm' => 3
  'd' => 0
  'h' => 0
  'i' => 0
  's' => 0
  'invert' => 1
)

Ejemplo

Creemos un intervalo negativo de 2 horas, 30 minutos (intervalo hacia atrás):

php<?php
  $interval = new DateInterval('PT2H30M');
  $interval->invert = 1;
  var_dump($interval);
?>

Resultado de ejecutar el código:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 0
  'h' => 2
  'i' => 30
  's' => 0
  'invert' => 1
)

Ejemplo

Añadamos un intervalo a la fecha actual:

php<?php
  $date = new DateTime('2023-01-01');
  $interval = new DateInterval('P10D');
  $date->add($interval);
  echo $date->format('Y-m-d');
?>

Resultado de ejecutar el código:

php'2023-01-11'

Ejemplo

Calculemos la diferencia entre dos fechas:

php<?php
  $date1 = new DateTime('2023-01-01');
  $date2 = new DateTime('2023-02-15');
  $interval = $date1->diff($date2);
  echo $interval->format('%m meses %d días');
?>

Resultado de ejecutar el código:

php'1 meses 14 días'

Ver también