timezone_name_from_abbr

(PHP 5 >= 5.1.3, PHP 7)

timezone_name_from_abbr Возвращает временную зону в соответствии с аббревиатурой

Описание

string timezone_name_from_abbr ( string $abbr [, int $gmtOffset = -1 [, int $isdst = -1 ]] )

Список параметров

abbr

Аббревиатура временной зоны.

gmtOffset

Смещение относительно GMT в секундах. По умолчанию -1, что означает возврат первой найденной временной зоны, отвечающей аббревиатуре abbr. В противном случае будет произведен поиск временной зоны с заданным смещением. Если поиск завершится неудачей, будет возвращена временная зона наиболее близкая к смещению.

isdst

Поправка на летнее время. По умолчанию -1, в этом случае поправка на летнее время не учитывается. Если передана 1, смещение gmtOffset учитывает действующее летнее время. Если задан 0, gmtOffset рассчитывается с учетом зимнего времени. Если abbr не существует, определение временной зоны опирается только на gmtOffset и isdst.

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

Возвращает имя временной зоны или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Пример использования timezone_name_from_abbr()

<?php
echo timezone_name_from_abbr("CET") . "\n";
echo 
timezone_name_from_abbr(""36000) . "\n";
?>

Результатом выполнения данного примера будет что-то подобное:

Europe/Berlin
Europe/Paris

Смотрите также

Коментарии

timezone_name_from_abbr() sometimes returns FALSE instead of an actual timezone: http://bugs.php.net/44780

It's possible to workaround it for some cases by getting the timezone name from timezone_abbreviations_list(). For example, if you have the GMT offset and want a timezone name:

<?php
/* Takes a GMT offset (in hours) and returns a timezone name */
function tz_offset_to_name($offset)
{
       
$offset *= 3600// convert hour offset to seconds
       
$abbrarray timezone_abbreviations_list();
        foreach (
$abbrarray as $abbr)
        {
                foreach (
$abbr as $city)
                {
                        if (
$city['offset'] == $offset)
                        {
                                return 
$city['timezone_id'];
                        }
                }
        }

        return 
FALSE;
}
?>
2008-11-10 19:25:29
http://php5.kiev.ua/manual/ru/function.timezone-name-from-abbr.html
Автор:
Another way to do this is to wrap the function in a class that extends the DateTimeZone class:

<?php

/**
 * Helps with timezones.
 * @link http://us.php.net/manual/en/class.datetimezone.php
 *
 * @package  Date
 */
class Helper_DateTimeZone extends DateTimeZone
{
   
/**
     * Converts a timezone hourly offset to its timezone's name.
     * @example $offset = -5, $isDst = 0 <=> return value = 'America/New_York'
     * 
     * @param float $offset The timezone's offset in hours.
     *                      Lowest value: -12 (Pacific/Kwajalein)
     *                      Highest value: 14 (Pacific/Kiritimati)
     * @param bool  $isDst  Is the offset for the timezone when it's in daylight
     *                      savings time?
     * 
     * @return string The name of the timezone: 'Asia/Tokyo', 'Europe/Paris', ...
     */
   
final public static function tzOffsetToName($offset$isDst null)
    {
        if (
$isDst === null)
        {
           
$isDst date('I');
        }

       
$offset *= 3600;
       
$zone    timezone_name_from_abbr(''$offset$isDst);

        if (
$zone === false)
        {
            foreach (
timezone_abbreviations_list() as $abbr)
            {
                foreach (
$abbr as $city)
                {
                    if ((bool)
$city['dst'] === (bool)$isDst &&
                       
strlen($city['timezone_id']) > 0    &&
                       
$city['offset'] == $offset)
                    {
                       
$zone $city['timezone_id'];
                        break;
                    }
                }

                if (
$zone !== false)
                {
                    break;
                }
            }
        }
   
        return 
$zone;
    }
}
?>

Then you could do something like this:

<?php
$Dtz 
= new Helper_DateTimeZone(Helper_DateTimeZone::tzOffsetToName(-5));
var_dump($Dtz->getName());

string(16"America/New_York"
?>
2009-02-24 09:03:51
http://php5.kiev.ua/manual/ru/function.timezone-name-from-abbr.html
Fun fact: (60*60) * -2 always seems to return null.

Perhaps because there's no timezone that corresponds to UTC -2.
2016-03-16 02:59:17
http://php5.kiev.ua/manual/ru/function.timezone-name-from-abbr.html
Автор:
In some cases, timezone_name_from_abbr() may return a "historical" (i.e. deprecated) timezone identifier rather than the current standard one for a given location. For example:
<?php
echo timezone_name_from_abbr('EASST'); // prints "Chile/EasterIsland" instead of "Pacific/Easter"
?>

This means that the returned timezone identifier is not guaranteed to be in the results of timezone_identifiers_list() unless you include the "backwards compatible" timezones.
<?php
var_dump
(in_array(timezone_name_from_abbr('EASST'), timezone_identifiers_list())); // (bool)false
var_dump(in_array(timezone_name_from_abbr('EASST'), timezone_identifiers_list(DateTimeZone::ALL_WITH_BC))); // (bool)true
?>
2016-09-24 08:34:43
http://php5.kiev.ua/manual/ru/function.timezone-name-from-abbr.html

    Поддержать сайт на родительском проекте КГБ