Функция cot_timezone_search в Cotonti

Описание функции
Функция ищет часовые пояса из глобального массива $cot_timezones, которые соответствуют переданному коду страны и/или смещению от GMT. Если критерии не заданы, возвращаются пустой список или совпадения по одному из условий.
Разберем функцию cot_timezone_search, которая возвращает список возможных часовых поясов, соответствующих заданным критериям: коду страны и/или смещению от GMT.

 


/**
 * Returns a list of possible timezones based on country and/or GMT offset.
 *
 * @param string $countrycode 2 char lowercase country code
 * @param int $gmtoffset Offset from GMT in seconds
 * @return array Numeric array of timezone identifiers
 */
function cot_timezone_search($countrycode = '', $gmtoffset = null)
{
	global $cot_timezones;
	$res = array();
	$both = ($countrycode && is_int($gmtoffset));
	foreach ($cot_timezones as $tz => $info)
	{
		$countrymatch = ($info[0] == $countrycode);
		$offsetmatch = (is_int($gmtoffset) && ($info[1] == $gmtoffset || $info[2] == $gmtoffset));
		if (($countrymatch && $offsetmatch) || (!$both && ($countrymatch || $offsetmatch)))
		{
			$res[] = $tz;
		}
	}
	sort($res);
	return $res;
}

 

Аргументы
$countrycode (string):

Двухсимвольный код страны в нижнем регистре, например, "us" для США или "ru" для России.
Если пусто, поиск по коду страны игнорируется.

$gmtoffset (int|null):

Смещение от GMT в секундах, например, 3600 для GMT+1 или -18000 для GMT-5.
Если null, поиск по смещению игнорируется.

Возвращаемое значение

Массив (array):

Список идентификаторов часовых поясов (например, "Europe/Moscow", "America/New_York").
Если совпадений нет, возвращается пустой массив.


Подробный разбор кода

1. Инициализация переменных
 
global $cot_timezones;
$res = array();
$both = ($countrycode && is_int($gmtoffset));
$cot_timezones: глобальный массив, содержащий информацию о часовых поясах в формате:

 
$cot_timezones = [
    'Europe/Moscow' => ['ru', 10800, 14400],
    'America/New_York' => ['us', -18000, -14400],
    // ...
];


Каждый элемент включает:

Код страны (ru, us и т.д.).
Зимнее смещение (10800 для GMT+3 и т.д.).
Летнее смещение (14400 для GMT+4 и т.д.).
$res: результирующий массив идентификаторов часовых поясов.

$both: флаг, указывающий, что оба условия поиска заданы (код страны и смещение).

2. Цикл по часовым поясам
 
foreach ($cot_timezones as $tz => $info)
{
    $countrymatch = ($info[0] == $countrycode);
    $offsetmatch = (is_int($gmtoffset) && ($info[1] == $gmtoffset || $info[2] == $gmtoffset));
    if (($countrymatch && $offsetmatch) || (!$both && ($countrymatch || $offsetmatch)))
    {
        $res[] = $tz;
    }
}


Цикл проходит по всем элементам $cot_timezones:
$tz: идентификатор часового пояса (например, "Europe/Moscow").
$info: массив с данными о коде страны и смещении.
Логика фильтрации:
Совпадение по коду страны:

 
$countrymatch = ($info[0] == $countrycode);


Проверяет, совпадает ли код страны в массиве $info[0] с заданным $countrycode.

Совпадение по смещению:

 
$offsetmatch = (is_int($gmtoffset) && ($info[1] == $gmtoffset || $info[2] == $gmtoffset));


Проверяет, совпадает ли заданное смещение $gmtoffset с зимним или летним смещением из массива $info[1] и $info[2].

Условие включения:

 
if (($countrymatch && $offsetmatch) || (!$both && ($countrymatch || $offsetmatch)))

Если заданы оба условия ($both == true), добавляются только те часовые пояса, которые удовлетворяют обоим.
Если задан только один критерий, добавляются часовые пояса, которые соответствуют хотя бы одному из условий.
3. Сортировка и возврат результата
 
sort($res);
return $res;


Результирующий массив идентификаторов сортируется в алфавитном порядке.
Возвращается отсортированный массив.


Примеры использования

1. Поиск по коду страны
 
$timezones = cot_timezone_search('ru');
print_r($timezones);

Результат:

 
[
    'Europe/Kaliningrad',
    'Europe/Moscow',
    'Europe/Samara',
    // ...
]


2. Поиск по смещению
 
$timezones = cot_timezone_search('', 3600);
print_r($timezones);


Результат:

 
[
    'Africa/Algiers',
    'Africa/Lagos',
    'Europe/Belgrade',
    // ...
]


3. Поиск по коду страны и смещению
 
$timezones = cot_timezone_search('us', -18000);
print_r($timezones);


Результат:

 
[
    'America/New_York',
    'America/Detroit',
    'America/Indiana/Indianapolis',
    // ...
]


Вывод
Функция cot_timezone_search — это мощный инструмент для поиска часовых поясов на основе:

Географического положения (страна).
Смещения от GMT.
Она позволяет быстро получить список релевантных часовых поясов, который можно использовать для отображения или настройки времени.

 

 

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 22.01.2025 19:59
  • Последнее обновление: 22.01.2025 19:59