You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP8.2以下版本如何实现INCLUDE_END_DATE的等效效果?

解决PHP版本低于8.2时DatePeriod::INCLUDE_END_DATE未定义的错误

当PHP版本低于8.2时,运行包含\DatePeriod::INCLUDE_END_DATE常量的代码会触发如下致命错误:

Fatal error: Uncaught Error: Undefined class constant 'INCLUDE_END_DATE'

触发错误的代码

$begin = new \DateTime('2023-04-03');
$end = new \DateTime('2023-04-04');

$interval = \DateInterval::createFromDateString('1 day');
$period = new \DatePeriod($begin, $interval, $end, \DatePeriod::INCLUDE_END_DATE);

foreach ($period as $dt) {
    echo $dt->format("Y-m-d") ."<br />";
}

预期输出

2023-04-03
2023-04-04

解决方案

INCLUDE_END_DATE是PHP 8.2才新增的类常量,低版本PHP无法识别,可通过以下两种方式实现相同效果:

方法1:偏移结束日期

将结束日期向后推移一个间隔周期,利用DatePeriod默认不包含结束日期的特性,间接实现包含原结束日期的效果:

$begin = new \DateTime('2023-04-03');
// 将原结束日期后移一天
$end = (new \DateTime('2023-04-04'))->add(\DateInterval::createFromDateString('1 day'));

$interval = \DateInterval::createFromDateString('1 day');
$period = new \DatePeriod($begin, $interval, $end);

foreach ($period as $dt) {
    echo $dt->format("Y-m-d") ."<br />";
}

方法2:手动追加结束日期

遍历周期内的日期后,手动将结束日期添加到输出结果中:

$begin = new \DateTime('2023-04-03');
$end = new \DateTime('2023-04-04');

$interval = \DateInterval::createFromDateString('1 day');
$period = new \DatePeriod($begin, $interval, $end);

// 输出周期内的日期
foreach ($period as $dt) {
    echo $dt->format("Y-m-d") ."<br />";
}
// 手动追加结束日期
echo $end->format("Y-m-d") ."<br />";

内容的提问来源于stack exchange,提问作者Syed Waqas Bukhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:15:05