timezone_name_from_abbr

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

timezone_name_from_abbrKısaltmasından ve UTC farkından tahminen zaman diliminin adını döndürür

Açıklama

timezone_name_from_abbr(string $kısaltma, int $utc_farkı = -1, int $gys_var = -1): string|false

Bağımsız Değişkenler

kısaltma

Zaman dilimi kısaltması.

utc_farkı

Yerel saatin UTC'ye göre saniye cinsinden farkı. Varsayılan değer, kısaltma bağımsız değişkeninin karşılığı olarak bulunan ilk zaman diliminin döndürüleceği anlamına gelen -1'dir. Yoksa, farka uyan zaman dilimi aranır ve bulunamadığı durumlarda fark ne olursa olsun bulunan ilk zaman dilimi döndürülür.

gys_var

Gün ışığından yararlanma saati göstergesi. Öntanımlı değer -1 olup arama sırasında zaman diliminin gün ışığından yararlanma özelliğinin olup olmadığının dikkate alınmadığı anlamına gelir. Bu 1 olarak ayarlanırsa, utc_farkı'nın etkin gün ışığından yararlanma farkını içerdiği varsayılır; 0 ise, utc_farkı gün ışığından yararlanma farkını içermiyor demektir. kısaltma yoksa, zaman dilimi yalnızca utc_farkı ve gys_var bağımsız değişkenlerine göre aranacaktır.

Dönen Değerler

Başarılı olduğunda zaman diliminin adını, başarısız olduğunda false döndürür.

Örnekler

Örnek 1 - timezone_name_from_abbr() örneği

<?php
echo timezone_name_from_abbr("EET") . "\n";
echo
timezone_name_from_abbr("", 3600, 0) . "\n";
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Europe/Helsinki
Europe/Paris

Ayrıca Bakınız

add a note add a note

User Contributed Notes 4 notes

up
8
chris at mretc dot net
16 years ago
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;
}
?>
up
2
Jon Stovell
8 years ago
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
?>
up
1
Master Tablu
15 years ago
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"
?>
up
-1
atrauzzi at gmail dot com
8 years ago
Fun fact: (60*60) * -2 always seems to return null.

Perhaps because there's no timezone that corresponds to UTC -2.
To Top