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
相关产品推荐
相关产品推荐

