Функция 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.
Она позволяет быстро получить список релевантных часовых поясов, который можно использовать для отображения или настройки времени.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 22.01.2025 19:59
- Последнее обновление: 22.01.2025 19:59