DatePeriod 类

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

简介

表示日期期间。

日期期间允许对一组日期和时间进行迭代,这些日期和时间在给定期间内以规则的间隔重复出现。

类概要

class DatePeriod implements IteratorAggregate {
/* 常量 */
public const int EXCLUDE_START_DATE;
public const int INCLUDE_END_DATE;
/* 属性 */
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;
/* 方法 */
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
}

预定义常量

DatePeriod::EXCLUDE_START_DATE

排除开始日期,用于 DatePeriod::__construct() 中。

DatePeriod::INCLUDE_END_DATE

包含结束日期,用于 DatePeriod::__construct() 中。

属性

recurrences

迭代器返回的实例的最小数量。

如果在 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";
?>

以上示例将输出


5
6
7
1
0

另请参见 DatePeriod::getRecurrences()

include_end_date

是否在重复日期集中包含结束日期。

include_start_date

是否在重复日期集中包含开始日期。

开始

周期的开始日期。

当前

在迭代过程中,它将包含周期内的当前日期。

结束

周期的结束日期。

间隔

ISO 8601 重复间隔规范。

变更日志

版本 描述
8.2.0 已添加 **DatePeriod::INCLUDE_END_DATE** 常量和 include_end_date 属性。
8.0.0 DatePeriod 现在实现了 IteratorAggregate。以前,实现了 Traversable

目录

添加备注

用户贡献的笔记 1 个笔记

mail at pascalhofmann dot de
7 年前
在循环遍历 DatePeriod 对象时,返回的对象始终实现 DateTimeInterface。返回的精确类型取决于 DatePeriod 的创建方式。如果 $start 是 DateTimeImmutable,则返回的对象将是 DateTimeImmutable 类型。如果使用的是 DateTime 对象,则返回的对象将是 DateTime 类型。
To Top