(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateInterval::__construct — Cria um novo objeto DateInterval
durationUma especificação de intervalo.
O formato inicia-se com a letra P,
de período.
Cada período de duração é representado por um valor inteiro
seguido do designador de período.
Se a duração conter elementos de tempo, essa porção
da especificação é precedida pela letra
T.
| Designador de Período | Descrição |
|---|---|
Y |
anos |
M |
meses |
D |
dias |
W |
semanas. Convertidas em dias.
Antes do PHP 8.0.0, não pode ser combinada com D.
|
H |
horas |
M |
minutos |
S |
segundos |
Alguns exemplos simples.
Dois dias é representado com P2D.
Dois segundos é representado com PT2S.
Seis anos e cinco minutos é representado com P6YT5M.
Nota:
O tipo de unidade deve ser inserida da unidade de maior escala a esquerda da de menor escala, essa a direta. Então, anos antes de meses, meses antes de dias, dias antes de minutos, e etc. Assim, um ano e quatro dias deve ser representado com
P1Y4D, e nãoP4D1Y.
A especificação também pode ser representada como data e hora.
Um exemplo de um ano e quatro dias seria
P0001-00-04T00:00:00.
Porém, valores neste formato não podem exceder o tamanho
máximo do período (por exemplo 25 horas é inválido).
Estes formatos são baseados na » ISO 8601 duration specification.
Dispara uma exceção DateMalformedIntervalStringException quando
o parâmetro duration não puder ser interpretado como um intervalo. Antes do
PHP 8.3, era uma Exception.
| Versão | Descrição |
|---|---|
| 8.3.0 | Agora dispara DateMalformedIntervalStringException em vez de Exception. |
| 8.2.0 |
Apenas as propriedades y a f,
invert e days estarão visíveis,
incluindo uma nova propriedade booleana from_string.
|
| 8.0.0 |
W pode ser combinado com D.
|
Exemplo #1 Construindo e usando objetos da classe DateInterval
<?php
// Cria uma data específica
$someDate = \DateTime::createFromFormat("Y-m-d H:i", "2022-08-25 14:18");
// Cria um intervalo
$interval = new \DateInterval("P7D");
// Adiciona o intervalo
$someDate->add($interval);
// Converte o intervalo para string
echo $interval->format("%d");O exemplo acima produzirá:
Exemplo #2 Exemplo da classe DateInterval
<?php
$interval = new DateInterval('P1W2D');
var_dump($interval);
?>Saída do exemplo acima no PHP 8.2:
object(DateInterval)#1 (10) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(9)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["invert"]=>
int(0)
["days"]=>
bool(false)
["from_string"]=>
bool(false)
}
Saída do exemplo acima no PHP 8:
object(DateInterval)#1 (16) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(9)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
bool(false)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}
Saída do exemplo acima no PHP 7:
object(DateInterval)#1 (16) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(2)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
bool(false)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}