- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar.php
- Класс: CCalendar
- Вызов: CCalendar::CountPastEvents
static function CountPastEvents($params)
{
$curCount = 0;
$dateFromTz = !empty($params['timeZone']) ? new DateTimeZone($params['timeZone']) : new DateTimeZone("UTC");
$dateToTz = !empty($params['timeZone']) ? new DateTimeZone($params['timeZone']) : new DateTimeZone("UTC");
$dateFrom = new MainTypeDateTime(date('Ymd His',self::Timestamp($params['dateFrom'])), 'Ymd His', $dateFromTz);
$dateTo = new MainTypeDateTime(date('Ymd His',self::Timestamp($params['dateTo'])), 'Ymd His', $dateToTz);
$parentInfoDate = getdate($dateFrom->getTimestamp());
$dateTo->setTime($parentInfoDate['hours'], $parentInfoDate['minutes']);
$diff = $dateFrom->getDiff($dateTo);
if ($params['rrule']['FREQ'] === 'DAILY')
{
$diff = (int)$diff->format('%a');
$curCount = $diff / (int)$params['rrule']['INTERVAL'];
}
if ($params['rrule']['FREQ'] === 'WEEKLY')
{
$diff = (int)$diff->format('%a');
for ($i = 0; $i < $diff; $i++)
{
$timestamp = $dateFrom->getTimestamp();
$date = getdate($timestamp);
$weekday = mb_strtoupper(mb_substr($date['weekday'], 0, 2));
if (in_array($weekday, $params['rrule']['BYDAY'], true))
{
$curCount++;
}
$dateFrom = $dateFrom->add('+1 day');
}
}
if ($params['rrule']['FREQ'] === 'MONTHLY')
{
$diff = (int)$diff->format('%m');
$curCount = $diff / (int)$params['rrule']['INTERVAL'];
}
if ($params['rrule']['FREQ'] === 'YEARLY')
{
$diff = (int)$diff->format('%y');
$curCount = $diff / (int)$params['rrule']['INTERVAL'];
}
return $curCount;
}