• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/icalendartimezone.php
  • Класс: CDavICalendarTimeZone
  • Вызов: CDavICalendarTimeZone::convertDateToTimeZone
static function convertDateToTimeZone($date, $timeZoneId)
{
	if (!isset(self::$arTimeZones[$timeZoneId]))
		return $date;

	$t = new CDavICalendarComponent();
	$t->InitializeFromString(self::$arTimeZones[$timeZoneId]);

	$offset = 0;
	$arTimeMap = array();

	$comps = $t->GetComponents();
	foreach ($comps as $comp)
	{
		$t = self::ParseVTimezone($comp, intval(date("Y", (int)$date)));
		if ($t !== false)
		{
			$arTimeMap[] = $t;
		}
	}

	if ($arTimeMap)
	{
		usort($arTimeMap, function($a, $b) {return ($a['time'] > $b['time']) ? 1 : (($a['time'] < $b['time']) ? -1 : 0);});

		if ($date < $arTimeMap[0]['time'])
		{
			$offset = $arTimeMap[0]['from'];
		}
		else
		{
			$fl = true;
			for ($i = 0, $n = count($arTimeMap); $i < $n - 1; $i++)
			{
				if (($date >= $arTimeMap[$i]['time']) && ($date < $arTimeMap[$i + 1]['time']))
				{
					$fl = false;
					$offset = $arTimeMap[$i]['to'];
				}
			}

			if ($fl)
			{
				if ($date >= $arTimeMap[$n - 1]['time'])
					$offset = $arTimeMap[$n - 1]['to'];
			}
		}
	}

	return $date + $offset - date('Z');
}