当循环遍历 DatePeriod 对象时,返回的对象始终实现 DateTimeInterface。返回的确切类型取决于 DatePeriod 的创建方式。如果 $start 是 DateTimeImmutable,则返回的对象将是 DateTimeImmutable 类型。如果使用了 DateTime 对象,则返回的对象将是 DateTime 类型。
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
表示一个日期周期。
日期周期允许迭代给定周期内以规律间隔重复的一组日期和时间。
$start
,$interval
,$recurrences
,$options
= 0$start
,$interval
,$end
,$options
= 0DatePeriod::EXCLUDE_START_DATE
int排除起始日期,在 DatePeriod::__construct() 中使用。
DatePeriod::INCLUDE_END_DATE
int包含结束日期,在 DatePeriod::__construct() 中使用。
迭代器返回的最小实例数。
如果在 DatePeriod 实例的构造函数中通过 recurrences 参数显式传递了重复次数,则此属性包含此值,加上如果起始日期未通过 DatePeriod::EXCLUDE_START_DATE
禁用则为 1,加上如果结束日期已通过 DatePeriod::INCLUDE_END_DATE
启用则为 1。
如果未显式传递重复次数,则此属性包含返回实例的最小数量。这将是 0
,加上如果起始日期未通过 DatePeriod::EXCLUDE_START_DATE
禁用则为 1,加上如果结束日期已通过 DatePeriod::INCLUDE_END_DATE
启用则为 1。
<?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;
// 显式地通过构造函数设置循环次数
$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";
// 未在构造函数中设置循环次数
$period = new DatePeriod($start, $interval, $end);
echo $period->recurrences, "\n";
$period = new DatePeriod($start, $interval, $end, DatePeriod::EXCLUDE_START_DATE);
echo $period->recurrences, "\n";
?>
以上示例将输出
是否包含结束日期在重复日期集中。
是否包含开始日期在重复日期集中。
周期的开始日期。
在迭代期间,这将包含周期内的当前日期。
周期的结束日期。
ISO 8601 重复间隔规范。
版本 | 描述 |
---|---|
8.4.0 | 类常量现在已类型化。 |
8.2.0 | 已添加DatePeriod::INCLUDE_END_DATE 常量和 include_end_date 属性。 |
8.0.0 | DatePeriod 现在实现 IteratorAggregate。之前,实现的是 Traversable。 |
当循环遍历 DatePeriod 对象时,返回的对象始终实现 DateTimeInterface。返回的确切类型取决于 DatePeriod 的创建方式。如果 $start 是 DateTimeImmutable,则返回的对象将是 DateTimeImmutable 类型。如果使用了 DateTime 对象,则返回的对象将是 DateTime 类型。