Получить правильное название часового пояса из формата времени гггг-мм-ддчч: мм: сс.с + zzzzzz

Я работаю с API, который возвращает время в стандарте ISO (yyyy-mm-ddThh:mm:ss.s+zzzzzz)
Куда:

yyyy is the year

mm (first) is the month

dd is the day

T is a separator indicating that time-of-day follows

hh is the hour on a 24-hour clock

mm (second) is the minute

ss is whole seconds

s (optional) is the fractional second

zzzzzz is the time zone

например, 2015-07-31T13: 00: 00.000 + 03: 00

Я хотел бы получить правильный часовой пояс от +03:00

То, что я пробовал, основано на других решениях здесь на stackoverflow:

$date = new DateTime('2015-07-31T13:00:00.000+03:00');
$newtz = date_timezone_get($date);
$offset= timezone_name_get($newtz);
$timezone = preg_replace('/[^0-9]/', '', $offset) * 36;
$timezone_name = timezone_name_from_abbr('', $offset, true);
echo $timezone_name;

Вышеприведенный код выводит: Europe/Helsinki но я ожидаю Africa/Nairobi

Вопрос в том, как сделать вывод кода Africa/Nairobi?

А также, где существуют две часовые пояса с одинаковым смещением, например:
Europe/Minsk а также Africa/Nairobi иметь смещения +03:00

2

Решение

Как уже отмечали другие, это отношения один-ко-многим (например, 1:50 или около того). Может быть немного более чистый способ сделать это, но вот что вы ищете:

$date = new DateTime('2015-07-31T13:00:00.000+03:00');
$newtz = date_timezone_get($date);
$offset_string= timezone_name_get($newtz);
$offset = preg_replace('/[^0-9]/', '', $offset_string) * 36;
$full_list_of_timezones = timezone_abbreviations_list();
foreach ($full_list_of_timezones as $array1) {
foreach ($array1 as $array2) {
if ($array2[offset] == $offset) {
echo $array2[timezone_id]."<br>\n";
}
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]