A classe DateInterval

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

Introdução

Representa um intervalo entre datas.

Um intervalo de data armazena, tanto uma quantidade de tempo (em anos, meses, dias, horas, etc), quanto uma string de tempo relativo no formato que o construtor da classe DateTime possui suporte.

Sinopse da classe

class DateInterval {
/* Propriedades */
public inteiro $y;
public inteiro $m;
public inteiro $d;
public inteiro $h;
public inteiro $i;
public inteiro $s;
public inteiro $invert;
public mixto $days;
/* Métodos */
public __construct(string $interval_spec)
public static createFromDateString(string $time): DateInterval
public format(string $format): string
}

Propriedades

y

Número de anos.

m

Número de meses.

d

Número de dias.

h

Número de horas.

i

Número de minutos.

s

Número de segundos.

invert

Será 1 se o intervalo representa um período negativo de tempo e 0 caso contrário. Veja DateInterval::format().

days

Se o objeto DateInterval foi criado por DateTime::diff(), representará o número total de dias entre a data inicial e final. Caso contrário, days será false.

Em versões anteriores ao PHP 5.4.20/5.5.4 em vez de false, retornará -99999 ao acessar essa propriedade.

Índice

add a note

User Contributed Notes 2 notes

up
9
cb
9 months ago
If you want to reverse a date interval use array_reverse and iterator_to_array. I've found using invert to be unreliable.

<?php
$start_date
= date_create("2021-01-01");
$end_date = date_create("2021-01-05"); // If you want to include this date, add 1 day

$interval = DateInterval::createFromDateString('1 day');
$daterange = new DatePeriod($start_date, $interval ,$end_date);

function
show_dates ($dr) {
foreach(
$dr as $date1){
echo
$date1->format('Y-m-d').'<br>';
}
}

show_dates ($daterange);

echo
'<br>';

// reverse the array

$daterange = array_reverse(iterator_to_array($daterange));

show_dates ($daterange);

?>

Gives
2021-01-01
2021-01-02
2021-01-03
2021-01-04

2021-01-04
2021-01-03
2021-01-02
2021-01-01
up
1
nateb at gurutechnologies dot net
3 years ago
Many people have commented on doing a reverse interval on a date time. I personally find a backwards year to be a little strange to think about and instead opt to work with just intervals. This is the easiest I have found.

<?php
$one_year
= new DateInterval('P1Y');
$one_year_ago = new DateTime();
$one_year_ago->sub($one_year);
?>

Instead of:

<?php
$one_year_ago
= new DateInterval( "P1Y" );
$one_year_ago->invert = 1;
$one_year_ago = new DateTime();
$one_year_ago->add($one_year);
?>
To Top