计数PHP DatePeriod()的迭代次数

woobm2wo  于 2023-04-19  发布在  PHP
关注(0)|答案(4)|浏览(90)

我知道日期周期是如何工作的,但有一个例外,有没有一种方法可以从日期周期中找出有多少个间隔?
例如:

// 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循环最终会运行多少次。

cigdeys3

cigdeys31#

你可以使用iterator_count函数来实现:

echo(iterator_count($period));
6rvt4ljy

6rvt4ljy2#

假设你只对计算天数感兴趣(不管间隔规格如何)- thx @mark-amery提出这个问题!
另一个更明显的方法是将两个日期进行比较,并从结果中获得天数。

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

请确保验证GET变量,以避免日期警告/错误。
迟做总比不做好- )

编辑:

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

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

rkue9o1l3#

$startDate = $period->getStartDate();
$endDate   = $period->getEndDate();
$interval  = $startDate->diff($endDate);
echo $interval->days
tyu7yeag

tyu7yeag4#

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

相关问题