• Модуль: 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;
}