• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/tzgen.php
  • Класс: TZGen
  • Вызов: TZGen::transitionRuleToVTransitionRule
static function transitionRuleToVTransitionRule(TZConvTransitionRule $transitionRule, $offsetFrom)
{
	$zone = $transitionRule->isdst ? 'DAYLIGHT' : 'STANDARD';
	$dtstart = clone $transitionRule->from;

	$offsetFromSign = $offsetFrom >=0 ? '+' : '-';
	$offsetFromString = $offsetFromSign .
	str_pad(floor(abs($offsetFrom)/3600), 2, '0', STR_PAD_LEFT) .
	str_pad((abs($offsetFrom)%3600)/60, 2, '0', STR_PAD_LEFT);

	$offsetToSign = $transitionRule->offset >=0 ? '+' : '-';
	$offsetToString = $offsetToSign .
	str_pad(floor(abs($transitionRule->offset)/3600), 2, '0', STR_PAD_LEFT) .
	str_pad((abs($transitionRule->offset)%3600)/60, 2, '0', STR_PAD_LEFT);

	$dtstart = $dtstart->modify("$offsetFrom seconds");

	$rule = '';
	if ($transitionRule->isRecurringRule())
	{
		$rule = 'RRULE:' . TZConvVTimeZoneRule::createFromTransitionRule($transitionRule);
	}
	else
	{
		$rdates = $transitionRule->getTransitionDates();
		$rdatesArray = array();
		foreach ($rdates as $rdate)
		{
			$rdate = clone $rdate;
			$rdate->modify("$offsetFrom seconds");

			$rdatesArray[] = $rdate->format('YmdTHis');
		}

		if (count($rdatesArray) > 0)
			$rule = str_replace(' ', '', wordwrap('RDATE;VALUE=DATE-TIME:'. implode(', ', $rdatesArray), 90, self::EOL));
	}

	$vTransitionRule  = "BEGIN:$zone" . self::EOL;
	$vTransitionRule .= "TZOFFSETFROM:$offsetFromString" . self::EOL;
	if ($rule !== "")
		$vTransitionRule .= "$rule" . self::EOL;
	$vTransitionRule .= "DTSTART:{$dtstart->format('YmdTHis')}" . self::EOL;
	$vTransitionRule .= "TZNAME:{$transitionRule->abbr}" . self::EOL;
	$vTransitionRule .= "TZOFFSETTO:$offsetToString" . self::EOL;
	$vTransitionRule .= "END:$zone" . self::EOL;

	return $vTransitionRule;
}