(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateInterval::__construct — Cria um novo objeto DateInterval
duration
Uma 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) }