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
DateInterval::__construct(string $duration)
Formato do intervalo
O formato consiste na letra P (period)
e nos elementos:
P{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
$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
$interval = new DateInterval('PT1H45M30S');
var_dump($interval);
?>
Resultado da execução do código:
DateInterval 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
$interval = new DateInterval('P3W2D');
var_dump($interval);
?>
Resultado da execução do código:
DateInterval 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
$interval = new DateInterval('P5M10DT6H');
var_dump($interval);
?>
Resultado da execução do código:
DateInterval 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
$interval = new DateInterval('P2YT15M');
var_dump($interval);
?>
Resultado da execução do código:
DateInterval 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
$interval = new DateInterval('P1DT12H30S');
var_dump($interval);
?>
Resultado da execução do código:
DateInterval 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
$interval = new DateInterval('P1Y3M');
$interval->invert = 1;
var_dump($interval);
?>
Resultado da execução do código:
DateInterval 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
$interval = new DateInterval('PT2H30M');
$interval->invert = 1;
var_dump($interval);
?>
Resultado da execução do código:
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 0
'h' => 2
'i' => 30
's' => 0
'invert' => 1
)
Exemplo
Vamos adicionar um intervalo à data atual:
<?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:
'2023-01-11'
Exemplo
Vamos calcular a diferença entre duas datas:
<?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:
'1 meses 14 dias'
Veja também
-
classe
DateTime,
que representa data e hora -
classe
DateTimeZone,
que representa um fuso horário