Classe DateInterval

A classe DateInterval permite trabalhar com intervalos de tempo em PHP. Ela é usada para armazenar a diferença entre duas datas ou para definir um intervalo em métodos de manipulação de datas. O intervalo é criado em um formato específico.

Sintaxe

phpDateInterval::__construct(string $duration)

Formato do intervalo

O formato consiste na letra P (period) e nos elementos:

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

Neste formato: Y - anos, M - meses, D - dias, T - separador de tempo, H - horas, M - minutos, S - segundos, W - semanas.

Antes dessas letras, é necessário escrever o valor correspondente. Por exemplo, 3Y significará três anos, e 5Y2M significará 5 anos e 2 meses.

Após a criação, o objeto DateInterval conterá as seguintes propriedades:

php<?php
  $interval->y  // anos
  $interval->m  // meses
  $interval->d  // dias
  $interval->h  // horas
  $interval->i  // minutos
  $interval->s  // segundos
  $interval->f  // microssegundos
  $interval->invert // 1 se o intervalo for negativo
  $interval->days // número de dias (se criado via diff())
?>

Vamos ver o funcionamento do intervalo com exemplos:

Exemplo

Vamos criar um intervalo de 1 hora, 45 minutos e 30 segundos:

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

Resultado da execução do código:

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

Exemplo

Vamos criar um intervalo de 3 semanas e 2 dias:

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

Resultado da execução do código:

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

Exemplo

Vamos criar um intervalo de 5 meses, 10 dias e 6 horas:

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

Resultado da execução do código:

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

Exemplo

Vamos criar um intervalo de 2 anos e 15 minutos:

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

Resultado da execução do código:

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

Exemplo

Vamos criar um intervalo de 1 dia, 12 horas e 30 segundos:

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

Resultado da execução do código:

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

Exemplo

Vamos criar um intervalo negativo de 1 ano e 3 meses (intervalo para trás):

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

Resultado da execução do código:

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

Exemplo

Vamos criar um intervalo negativo de 2 horas, 30 minutos (intervalo para trás):

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

Resultado da execução do código:

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

Exemplo

Vamos adicionar um intervalo à data atual:

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

Resultado da execução do código:

php'2023-01-11'

Exemplo

Vamos calcular a diferença entre duas datas:

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

Resultado da execução do código:

php'1 meses 14 dias'

Veja também