- Модуль: dav
- Путь к файлу: ~/bitrix/modules/dav/classes/general/icalendartimezone.php
- Класс: CDavICalendarTimeZone
- Вызов: CDavICalendarTimeZone::GetVTimezoneOffset
static function GetVTimezoneOffset($arDate, $arTime, $tzid, $calendar)
{
$arDateKeys = [
'hours' => 0,
'minutes' => null,
'seconds' => null,
'month' => null,
'mday' => null,
'year' => null,
];
$arDate = array_merge($arDateKeys, $arDate);
$arVTimezones = $calendar->GetComponentsByProperty('VTIMEZONE', 'TZID', $tzid);
if (!$arVTimezones)
{
return false;
}
$arTimeMap = array();
foreach ($arVTimezones as $vtimezone)
{
foreach ($vtimezone->GetComponents() as $comp)
{
$t = self::ParseVTimezone($comp, $arDate["year"]);
if ($t !== false)
{
$arTimeMap[] = $t;
}
}
}
if (!$arTimeMap)
{
return false;
}
sort($arTimeMap);
$t = @gmmktime($arDate["hours"], $arDate["minutes"], $arDate["seconds"], $arDate["month"], $arDate["mday"], $arDate["year"]);
if ($t < $arTimeMap[0]['time'])
{
return $arTimeMap[0]['from'];
}
for ($i = 0, $n = count($arTimeMap); $i < $n - 1; $i++)
{
if (($t >= $arTimeMap[$i]['time']) && ($t < $arTimeMap[$i + 1]['time']))
{
return $arTimeMap[$i]['to'];
}
}
if ($t >= $arTimeMap[$n - 1]['time'])
{
return $arTimeMap[$n - 1]['to'];
}
return false;
}