PHP проверить является ли строка временной зоной timezone - все временные зоны список - функция пример

"Все" временные зоны

На данный момент максимальный список поддерживаемых временных зон (подразумевают те, что проходят такую проверку) можно получить вызовом функции:

// получаем массив временных зон (в т.ч. обратно совместимые)
$tarr  = timezone_identifiers_list(DateTimeZone::ALL_WITH_BC);

Для данной функции можно выполнить такую проверку:

 $tarr = ['MSK', 'PKT', 'UTC', 'WET', 'EET', 'CET'];
 foreach ($tarr as $val){
    if (is_timezone($val)){
      echo 'yes';  
    } else echo 'no';
    
    echo '< br >';
 }

 function is_timezone($str){
     return in_array($str, timezone_identifiers_list(DateTimeZone::ALL_WITH_BC)); 
 }

получим:

no
no
yes
yes
yes
yes

(сравните результаты со случаем приведённым ниже)

Не все зоны

Для определения того, что данная строка является поддерживаемой PHP таймзоной можно использовать такую функцию:

 
 /**
  * проверит является ли переданная строка поддерживаемой 
  * времнной зоной - предайте DateTimeZone::ALL_WITH_BC чтобы 
  * лля полого сравнения
  * 
  * @param type $str
  * @return type boolaen
  */
 function is_timezone($str){
     return in_array($str, timezone_identifiers_list()); 
 }

Скрипт проверки, приведённый выше даст такой результат (без DateTimeZone::ALL_WITH_BC):

no
no
yes
no
no
no

получим (у меня получилось так):

no no yes

то есть из трёх переданных строк только UTC явяется поддерживаемой временной зоной.

ЕЩЁ

вот полезный скрипт вывода поддерживаемых временных зон.

Под видом временных зон мне встречалиь следующие (неподдерживаемые):

YEKT - видимо, Екатерибург
MSK   - видимо, Московское время
SAMT - видимо,  Самара
PKT - судя по всему  - время Пакистана 

Им соответствуют (из списка поддреживаемых):

YEKT  =  Asia/Yekaterinburg
MSK   =  Europe/Moscow
SAMT =  Europe/Samara
PKT    = Asia/Ashgabat

Asia/Ashgabat выбрана потому, что Пакистан тоже находится во временной зоне UTC+5 (Asia/Ashgabat)