Считать итерации PHP DatePeriod() - программирование
Подтвердить что ты не робот

Считать итерации 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 закончится.

4b9b3361

Ответ 1

Вы можете использовать iterator_count для этого:

echo(iterator_count($period));

Ответ 2

Предполагая, что вы заинтересованы в подсчете количества дней (независимо от интервала spec) - спасибо @mark-amery для этого!

Еще один очевидный подход заключается в том, чтобы разделить две даты и получить количество дней от результата.

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

Обязательно проверяйте свои GET-вары, чтобы избежать предупреждений/ошибок даты.

Лучше поздно, чем никогда; -)

EDIT:

Если у вас есть только объект периода, у вас есть доступ к началу и концу периода.

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

Ответ 3

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