2011-03-19 12 views
11

Zaczynając od identyfikatora strefy czasowej, takiego jak "America/Los_Angeles", jak znaleźć nazwy i skróty do tej strefy czasowej w PHP? Na przykład:Jak uzyskać nazwy i skróty strefy czasowej w PHP?

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

Gdybym mógł dostać tylko krótki skrót ('PST' i 'PDT'), że byłoby ok.

Spojrzałem na DateTimeZone::listAbbreviations() i próbowałem sprawdzać, aby zobaczyć, które odpowiadają moim id, jednak dla Ameryki/Los_Angeles, znajduje "PST", "PDT", "PPT" i "PWT", który jest nieco ciekawy .

+0

Według https://github.com/eggert/tz/blob/master/northamerica # L146, wygląda jak "W" i "P" w PWT i PPT oznaczają odpowiednio "wojna" i "pokój". – gvl

Odpowiedz

7

nadzieja to pomoże Ci

<?php 
    date_default_timezone_set('Europe/Sofia'); 
    echo date_default_timezone_get(); // Europe/Sofia 
    echo ' => '.date('T'); // => EET 
?> 
+2

Dzięki, ale to idzie tylko w połowie. Mam już identyfikator ("Europe/Sofia") i szukam nazwy samej strefy czasowej ("czas wschodnioeuropejski"/"czas wschodnioeuropejski letni") – nickf

1

Wygląda Symphony ma metody, które, na przykład select_timezone_tag. Możesz sprawdzić their source code, aby zobaczyć, jak to się robi.

9

Mam nadzieję, że to pomoże:

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');

I masz:

EDT

+0

Nie działa poprawnie dla 'echo get_timezone_abbreviation ("Asia/Kolkata"); ' –

+0

@DebeshNayak Jakiej wersji PHP używasz? –

+0

@DebeshNayak, właśnie testowałem w kilku wersjach PHP i to działa. Proszę spojrzeć: http://take.ms/Pp0Ws –

1

Chodzi o to, nazwa strefy czasowej zależy od pory roku, na przykład w zimie To CET, w lecie jest to CEST.

Możemy uzyskać nazwę strefy czasowej za pomocą bieżącej daty i godziny.

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

obsługuje tylko strefy czasowe, które php zna, nie wiedział, co to jest "Pacific Standard Time".

Tutaj można zobaczyć jak to przełącza pomiędzy CET 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 
5

nadzieję, że pomoże Ci

<?php 
$dateTime = new DateTime(); 
$dateTime->setTimeZone(new DateTimeZone('America/Havana')); 
echo $dateTime->format('T'); 
?> 
Powiązane problemy