在循环遍历 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
排除开始日期,用于 DatePeriod::__construct() 中。
DatePeriod::INCLUDE_END_DATE
包含结束日期,用于 DatePeriod::__construct() 中。
迭代器返回的实例的最小数量。
如果在 DatePeriod 实例的构造函数中通过 recurrences 参数显式传递了递归次数,则此属性包含此值,加上一个如果开始日期未通过 DatePeriod::EXCLUDE_START_DATE
禁用,加上一个如果结束日期已通过 DatePeriod::INCLUDE_END_DATE
启用。
如果递归次数未显式传递,则此属性包含返回实例的最小数量。这将是 0
,加上一个如果开始日期未通过 DatePeriod::EXCLUDE_START_DATE
禁用,加上一个如果结束日期已通过 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;
// 递归次数通过构造函数显式设置
$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.2.0 | 已添加 **DatePeriod::INCLUDE_END_DATE ** 常量和 include_end_date 属性。 |
8.0.0 | DatePeriod 现在实现了 IteratorAggregate。以前,实现了 Traversable。 |
在循环遍历 DatePeriod 对象时,返回的对象始终实现 DateTimeInterface。返回的精确类型取决于 DatePeriod 的创建方式。如果 $start 是 DateTimeImmutable,则返回的对象将是 DateTimeImmutable 类型。如果使用的是 DateTime 对象,则返回的对象将是 DateTime 类型。