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