2011-03-19 48 views
11

Bắt đầu với từ định danh múi giờ, chẳng hạn như "America/Los_Angeles", làm thế nào để bạn tìm thấy tên và chữ viết tắt của múi giờ đó trong PHP? Ví dụ:Làm thế nào để có được tên và chữ viết tắt của một múi giờ trong PHP?

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

Nếu tôi chỉ nhận được chữ viết tắt ngắn ('PST' và 'PDT'), điều đó sẽ ổn.

Tôi đã xem DateTimeZone::listAbbreviations() và cố gắng kiểm tra xem id nào tương ứng với id của tôi, tuy nhiên đối với America/Los_Angeles, nó tìm thấy "PST", "PDT", "PPT" và "PWT" hơi tò mò .

+0

Theo https://github.com/eggert/tz/blob/master/northamerica # L146, có vẻ như "W" và "P" trong PWT và PPT là viết tắt của "chiến tranh" và "hòa bình" tương ứng. – gvl

Trả lời

7

hy vọng điều này sẽ giúp bạn

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

Cảm ơn, nhưng điều đó chỉ đi một nửa. Tôi đã có id ("Châu Âu/Sofia"), và tôi đang tìm kiếm tên của múi giờ ("Giờ Đông Âu"/"Giờ mùa Đông Âu") – nickf

1

Hình như Symphony có phương pháp cho rằng, ví dụ select_timezone_tag. Bạn có thể kiểm tra their source code để xem cách thực hiện.

9

Tôi hy vọng điều này sẽ giúp:

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

Và bạn nhận được:

EDT

+0

Nó không hoạt động đúng với 'echo get_timezone_abbreviation ('Asia/Kolkata'); ' –

+0

@DebeshNayak Bạn đang sử dụng phiên bản PHP nào? –

+0

@DebeshNayak, tôi vừa thử nghiệm trong một số phiên bản của PHP và nó hoạt động. Xin hãy xem: http://take.ms/Pp0Ws –

1

Có điều là, một tên múi giờ phụ thuộc vào thời gian trong năm, ví dụ như trong mùa đông đó là CET, vào mùa hè nó CEST.

Chúng tôi có thể lấy tên múi giờ bằng cách sử dụng ngày giờ hiện tại.

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

chỉ hỗ trợ múi giờ mà php biết, không biết "Giờ chuẩn Thái Bình Dương" là gì.

đây bạn có thể nhìn thấy nó như thế nào chuyển đổi giữa CET và 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

Hy vọng điều này sẽ giúp bạn

<?php 
$dateTime = new DateTime(); 
$dateTime->setTimeZone(new DateTimeZone('America/Havana')); 
echo $dateTime->format('T'); 
?> 
Các vấn đề liên quan