Ответ 1
Вы можете использовать iterator_count
для этого:
echo(iterator_count($period));
Я понимаю, как работает дата с одним исключением, есть ли способ узнать из периода времени, сколько интервалов есть?
Итак, например:
// 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));
Предполагая, что вы заинтересованы в подсчете количества дней (независимо от интервала spec) - спасибо @mark-amery для этого!
Еще один очевидный подход заключается в том, чтобы разделить две даты и получить количество дней от результата.
$numDays = $end->diff($begin)->days;
$numDaysFormatted = $end->diff($begin)->format('%d days');
Обязательно проверяйте свои GET-вары, чтобы избежать предупреждений/ошибок даты.
Лучше поздно, чем никогда; -)
EDIT:
Если у вас есть только объект периода, у вас есть доступ к началу и концу периода.
$numDays = $period
->getEndDate()
->diff($period->getStartDate())
->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