2011-03-19 40 views
11

从时区标识开始,如"America/Los_Angeles",您如何在PHP中找到该时区的名称和缩写?例如:如何在PHP中获取时区的名称和缩写?

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

如果我只能得到简称('PST'和'PDT'),那就没问题。

我看过DateTimeZone::listAbbreviations(),并试图检查看看哪些符合我的id,但是对于America/Los_Angeles,它找到了“PST”,“PDT”,“PPT”和“PWT”,这有点好奇。

+0

据https://github.com/eggert/tz/blob/master/northamerica#L146,看起来PWT和PPT中的“W”和“P”分别代表“战争”和“和平”。 – gvl 2017-06-21 21:33:06

回答

7

希望这将帮助你

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

谢谢,但那只是一半。我已经有了id(“Europe/Sofia”),并且我正在寻找时区本身的名称(“东欧时间”/“东欧夏令时”) – nickf 2011-03-19 14:34:52

1

看起来像交响乐具有为,例如方法select_timezone_tag。你可以检查their source code看看它是如何完成的。

9

我希望这有助于:

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( '美国/纽约');

,你会得到:

EDT

+0

对于'echo get_timezone_abbreviation ('Asia/Kolkata');' – 2016-08-04 05:11:37

+0

@DebeshNayak您使用的是哪个版本的PHP? – 2016-08-05 14:39:18

+0

@DebeshNayak,我刚刚在PHP的几个版本中测试过,它的工作原理。请看一下:http://take.ms/Pp0Ws – 2016-08-05 14:52:20

1

的事情是,一个时区名称取决于一年的时间,例如在它的CET冬天,在它的CEST夏天。

我们可以通过使用当前的日期和时间来获取时区的名称。

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

它仅支持在PHP知道时区,但不知道什么是“太平洋标准时间”了。

在这里你可以看到它是如何切换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

希望这将帮助你

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