Функция 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.
Она позволяет быстро получить список релевантных часовых поясов, который можно использовать для отображения или настройки времени.
Comments (0)
Article multicategories
Additional categories where this article is shown as similar.Content author
Offline
Administrator
Last logged: 2026-09-13 14:50
- Page published: 2025-01-22 19:59
- Last update: 2025-01-22 19:59