计算 PHP DatePeriod() 的迭代次数



我了解日期周期的工作原理,但有一个例外,有没有办法从日期周期中找出有多少个间隔?

例如:

// define the period of the range
$period = new DatePeriod($begin, $rangeType, $end);
// iterate through the dates in range
foreach ( $period as $dt ) {
}

这就是我想从上面的代码中做的事情:

echo count($period);

基本上,我想知道foreach循环最终会运行多少次。

您可以使用

iterator_count函数来实现此目的:

echo(iterator_count($period));

假设您只对计算天数感兴趣(无论间隔规格如何) - 感谢 @mark-amery 提出这个问题!

另一种更明显的方法是差分 2 个日期并从结果中获取天数。

$numDays = $end->diff($begin)->days;
$numDaysFormatted = $end->diff($begin)->format('%d days');

请务必验证您的 GET 变量以避免日期警告/错误。

迟到总比没有好;-)

编辑:

如果您只有一个周期对象,则可以访问周期的开始和结束。

$numDays = $period
    ->getEndDate()
    ->diff($period->getStartDate())
    ->days;

查找日期周期间隔的一种选择是在日期时间(开始和结束日期的差异)和提取天数上使用 diff() 方法

https://www.php.net/manual/en/datetime.diff

示例代码

$period = new DatePeriod($begin, $rangeType, $end);
$startDate = $period->getStartDate();
$endDate   = $period->getEndDate();
$interval  = $startDate->diff($endDate);
echo $interval->days
class MyDatePeriod extends DatePeriod
{
    public $dates;
    public function toArray()
    {
        if ($this->dates === null) {
            $this->dates = iterator_to_array($this);
        }
        return $this->dates;
    }
}
$p = new MyDatePeriod(date_create('2008-01-01'),
                      DateInterval::createFromDateString( "+2 days" ),
                      date_create('2008-12-31'));
echo count($p->toArray()) . "n"; // 183
echo count($p->toArray()) . "n"; // 183

相关内容

  • 没有找到相关文章

最新更新