• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/icloud/eventbuilder.php
  • Класс: BitrixCalendarSyncIcloudEventBuilder
  • Вызов: EventBuilder::prepareRecurrenceRule
private function prepareRecurrenceRule(RecurringEventRules $rrule, ?DateTimeZone $timeZone): string
{
	$result = 'FREQ=' . $rrule->getFrequency();
	if ($rrule->getInterval())
	{
		$result .= ';INTERVAL=' . $rrule->getInterval();
	}
	if ($rrule->getByday())
	{
		$result .= ';BYDAY=' . implode(',', $rrule->getByday());
	}
	if ($rrule->getCount())
	{
		$result .= ';COUNT=' . $rrule->getCount();
	}
	else if (
		$rrule->getUntil()
		&& $rrule->getUntil()->getDate()->getTimestamp()
		&& $rrule->getUntil()->getDate()->getTimestamp() < 2145830400
	)
	{
		$offset = 0;
		if ($timeZone)
		{
			$offset = $timeZone->getTimeZone()->getOffset(new DateTime('now', $timeZone->getTimeZone()));
		}

		$untilTimestamp = $rrule->getUntil()->getDate()->getTimestamp() + (self::DAY_LENGTH - 1) - $offset;
		$result .= ';UNTIL=' . date('Ymd\THis\Z', $untilTimestamp);
	}

	return $result;
}