International PHP Conference Berlin 2025

A classe DatePeriod

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

Introdução

Representa um período entre datas.

O período entre datas permite a interação entre um conjunto de datas e horários recorrentes a intervalos regulares, durante um determinado período.

Resumo da classe

class DatePeriod implements IteratorAggregate {
/* Constantes */
public const int EXCLUDE_START_DATE;
public const int INCLUDE_END_DATE;
/* Propriedades */
public readonly ?DateTimeInterface $start;
public readonly ?DateTimeInterface $current;
public readonly ?DateTimeInterface $end;
public readonly ?DateInterval $interval;
public readonly int $recurrences;
public readonly bool $include_start_date;
public readonly bool $include_end_date;
/* Métodos */
public __construct(
    DateTimeInterface $start,
    DateInterval $interval,
    int $recurrences,
    int $options = 0
)
public __construct(
    DateTimeInterface $start,
    DateInterval $interval,
    DateTimeInterface $end,
    int $options = 0
)
public __construct(string $isostr, int $options = 0)
public static createFromISO8601String(string $specification, int $options = 0): static
}

Constantes predefinidas

DatePeriod::EXCLUDE_START_DATE int

Exclui a data inicial, utilizada em DatePeriod::__construct().

DatePeriod::INCLUDE_END_DATE int

Inclui a data final, utilizado em DatePeriod::__construct().

Propriedades

recurrences

O número mínimo de instâncias retornadas pelo iterator.

O número de recorrências que foi informado explicitamente no parâmetro recurrences no construtor da instância de DatePeriod, de forma que essa propriedade contém este valor, mais um se a data inicial não foi excluída através de DatePeriod::EXCLUDE_START_DATE, mais um se a data final foi incluída através de DatePeriod::INCLUDE_END_DATE.

Se o número de recorrências não foi informado explicitamente, então esta propriedade conte o número mínimo de recorrências a retornar. Isto pode ser 0, mais um se a data inicial não foi excluída através de DatePeriod::EXCLUDE_START_DATE, mais um se a data finnal não foi incluída através de DatePeriod::INCLUDE_END_DATE.

<?php
$start
= new DateTime('2018-12-31 00:00:00');
$end = new DateTime('2021-12-31 00:00:00');
$interval = new DateInterval('P1M');
$recurrences = 5;

// recorrências informadas no construtor
$period = new DatePeriod($start, $interval, $recurrences, DatePeriod::EXCLUDE_START_DATE);
echo
$period->recurrences, "\n";

$period = new DatePeriod($start, $interval, $recurrences);
echo
$period->recurrences, "\n";

$period = new DatePeriod($start, $interval, $recurrences, DatePeriod::INCLUDE_END_DATE);
echo
$period->recurrences, "\n";

// recorrências não informadas no construtor
$period = new DatePeriod($start, $interval, $end);
echo
$period->recurrences, "\n";

$period = new DatePeriod($start, $interval, $end, DatePeriod::EXCLUDE_START_DATE);
echo
$period->recurrences, "\n";
?>

O exemplo acima produzirá:


5
6
7
1
0

Veja também DatePeriod::getRecurrences().

include_end_date

Se inclui a data final no conjunto de datas a retornar.

include_start_date

Se inclui a data inicial no conjunto de datas a retornar.

start

A data inicial do período.

current

Contém a data atual dentro do período.

end

Data final do período.

interval

Uma especificação ISO 8601 do intervalo repetidor.

Registro de Alterações

Versão Descrição
8.4.0 As constantes de classe agora são tipadas.
8.2.0 A constante DatePeriod::INCLUDE_END_DATE e a propriedade include_end_date foram adicionados.
8.0.0 DatePeriod agora implementa IteratorAggregate. Anteriormente implementava Traversable.

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
23
mail at pascalhofmann dot de
7 years ago
When looping over a DatePeriod object, the returned objects always implement DateTimeInterface. The exact type returned depends on how the DatePeriod was created. If $start was a DateTimeImmutable, the objects returned will be of type DateTimeImmutable. If a DateTime object was used, the objects returned will be of type DateTime.
To Top