PHP Conference Japan 2024

DatePeriod 類別

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

簡介

表示日期期間。

日期期間允許在給定的期間內,以規律的間隔重複,迭代一組日期和時間。

類別概要

class DatePeriod implements IteratorAggregate {
/* 常數 */
public const int EXCLUDE_START_DATE;
公開 常數 整數 INCLUDE_END_DATE;
/* 屬性 */
公開 只讀 ?DateTimeInterface $start;
公開 只讀 ?DateTimeInterface $current;
公開 只讀 ?DateTimeInterface $end;
公開 只讀 ?DateInterval $interval;
公開 只讀 整數 $recurrences;
公開 只讀 布林值 $include_start_date;
公開 只讀 布林值 $include_end_date;
/* 方法 */
公開 __construct(
    DateTimeInterface $start,
    DateInterval $interval,
    int $recurrences,
    int $options = 0
)
公開 __construct(
    DateTimeInterface $start,
    DateInterval $interval,
    ) DateTimeInterface $end,
    int $options = 0
)
公開 __construct(string $isostr, int $options = 0)
公開 靜態 createFromISO8601String(string $specification, int $options = 0): static
公開 getRecurrences(): ?int
}

預定義常數

DatePeriod::EXCLUDE_START_DATE int

排除起始日期,用於 DatePeriod::__construct()

DatePeriod::INCLUDE_END_DATE int

包含結束日期,用於 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

是否將起始日期包含在循環日期集合中。

start

週期的起始日期。

current

在迭代期間,此變數將包含期間內的當前日期。

結束日期 (end)

期間的結束日期。

間隔 (interval)

一個 ISO 8601 循環間隔規範。

更新日誌 (Changelog)

版本 (Version) 說明 (Description)
8.4.0 類別常數現在已加入類型提示。
8.2.0 已新增 DatePeriod::INCLUDE_END_DATE 常數和 include_end_date 屬性。
8.0.0 DatePeriod 現在實作 IteratorAggregate。先前實作的是 Traversable

目錄 (Table of Contents)

發現問題了嗎?(Found A Problem?)

新增註解

使用者貢獻的註解 1 則註解

mail at pascalhofmann dot de
7 年前
當循環遍歷 DatePeriod 物件時,返回的物件總是實作 DateTimeInterface。返回的確切類型取決於 DatePeriod 的建立方式。如果 $start 是 DateTimeImmutable,則返回的物件將是 DateTimeImmutable 類型。如果使用 DateTime 物件,則返回的物件將是 DateTime 類型。
To Top