18

Starting with a time zone identifier, such as "America/Los_Angeles", how do you find the names and abbreviations of that time zone in PHP? For example:

'PST', 'Pacific Standard Time', 'PDT', 'Pacific Daylight Time'

If I could get only the short abbreviation ('PST' and 'PDT'), that would be ok.

I've looked at DateTimeZone::listAbbreviations(), and tried inspecting that to see which correspond with my id, however for America/Los_Angeles, it finds "PST", "PDT", "PPT" and "PWT" which is slightly curious.

nickf
  • 537,072
  • 198
  • 649
  • 721
  • According to https://github.com/eggert/tz/blob/master/northamerica#L146, it looks like the "W" and "P" in PWT and PPT stand for "war" and "peace" respectively. – gvl Jun 21 '17 at 21:33

5 Answers5

15

hope this will help you

<?php
    date_default_timezone_set('Europe/Sofia');
    echo date_default_timezone_get(); // Europe/Sofia
    echo ' => '.date('T'); // => EET
?>
Teneff
  • 30,564
  • 13
  • 72
  • 103
  • 2
    Thanks, but that only goes half way. I already have the id ("Europe/Sofia"), and I'm looking for the name of the time zone itself ("Eastern European Time"/"Eastern European Summer Time") – nickf Mar 19 '11 at 14:34
11

I hope this helps:

function get_timezone_abbreviation($timezone_id)
{
    if($timezone_id){
        $abb_list = timezone_abbreviations_list();

        $abb_array = array();
        foreach ($abb_list as $abb_key => $abb_val) {
            foreach ($abb_val as $key => $value) {
                $value['abb'] = $abb_key;
                array_push($abb_array, $value);
            }
        }

        foreach ($abb_array as $key => $value) {
            if($value['timezone_id'] == $timezone_id){
                return strtoupper($value['abb']);
            }
        }
    }
    return FALSE;
}

get_timezone_abbreviation('America/New_York');

And you get:

EDT

Joe L.
  • 4,433
  • 1
  • 19
  • 14
8

Hope this will help you

<?php
$dateTime = new DateTime();
$dateTime->setTimeZone(new DateTimeZone('America/Havana'));
echo $dateTime->format('T');
?>
ajay p
  • 639
  • 1
  • 7
  • 10
4

The thing is, a timezone name depends on the time of the year, for example in the winter it's CET, in the summer it's CEST.

We can get the name of the timezone by using the current date and time.

$timezone = 'Pacific/Midway';
$dt = new DateTime('now', new DateTimeZone($timezone));
$abbreviation = $dt->format('T'); // SST

it only supports the timezones that php knows, it didn't know what "Pacific Standard Time" was.

Here you can see how it switches between CET and CEST

    $t = new CDateTime('2015-09-22 11:00', new DateTimeZone('CET'));
    $t->format('T'); // CEST

    $t = new CDateTime('2015-12-22 11:00', new DateTimeZone('CET'));
    $t->format('T'); // CET
Timo Huovinen
  • 53,325
  • 33
  • 152
  • 143
1

Looks like Symphony has methods for that, e.g. select_timezone_tag. You might check their source code to see how it's done.

JRL
  • 76,767
  • 18
  • 98
  • 146