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