簡體   English   中英

在 PHP 中獲取更長的時區名稱

[英]Get longer time zone name in PHP

給定像“EST”這樣的時區縮寫,我可以通過使用timezone_name_from_abbr來獲得“America/New York”。 有沒有返回類似“東部標准時間”的函數?

通常,您不應該信任timezone_name_from_abbr函數,因為它只會返回找到的個匹配縮寫的條目。 時區縮寫不是唯一的。 例如,共有5個不同的時區,共享縮寫“ CST”。 有關歧義的更多示例,請參見Wikipedia上的此縮寫列表

作為PHP的特定情況,請考慮縮寫“ IST”。 可能有人希望timezone_name_from_abbr("IST")返回"Asia/Kolkata" ,代表印度標准時間。 但是,它實際上返回"Asia/Jerusalem" ,代表以色列標准時間。 兩個時區都使用IST的縮寫,但"Asia/Jerusalem"按字母順序排在首位。

考慮到這一點,您現在應該明白為什么僅給定“ EST”的函數返回“ Eastern Standard Time”也不可行。 盡管EST可能有可能,但並非在所有情況下都有效。 還要考慮“東部標准時間”是英語 ,並且還有其他縮寫和不同語言的文字描述。

有一個項目包含您正在談論的信息,該信息來自Unicode,稱為通用語言環境數據存儲庫 (或CLDR)。 使用CLDR數據,您將能夠編寫接受時區標識符的函數(例如"America/New_York" )和語言/區域代碼(例如"en-US" ,並返回縮寫“ ET”,“ EST ”和“ EDT”,以及名稱“東部時間”,“東部標准時間”和“東部夏令時間”。 然后,您需要根據所討論的上下文和/或特定時間來決定使用哪個名稱和縮寫。

我已經為.NET編寫了一個這樣的庫,稱為TimeZoneNames 對於PHP,您將需要類似的東西。 我不知道要推薦哪種特定的PHP,但是也許有人寫過,或者您可以通過直接使用CLDR源數據來創建所需的功能。

這是我追求了一段時間,看到別人正在尋找與最后一次推送相同的功能:)

webit4me / timezone是一個PHP工具,可以幫助獲取給定時區的名稱,位置或偏移量。

該工具還為帶有類似縮寫的時區提供了一種解決方法。

即在馬特(Matt)的 IST 示例中,我們有3個不同的時區

  1. 印度標准時間(UTC +5:30)
  2. 愛爾蘭標准時間(UTC +1:00)
  3. 以色列標准時間(UTC +2:00)

默認的IST對象將引用第一次出現的對象,然后我們將再有2個對象IST100和IST200來處理愛爾蘭和以色列的標准時間。 請注意,100200后綴從時區的偏移來,例如UTC + 1:30人是130。

希望該軟件包對您有所幫助,如有需要,請隨時添加標簽並做出相應的調整, 網址http://github.com/webit4me/timezone

從縮寫中獲取更長的名稱是不可靠的,但是如果您使用 DateTime 對象,並且在設置默認時區或創建 DateTime 對象時使用長名稱。 在格式字符串中使用 T 將為您提供 3 個字母的縮寫,但您可以獲得像這樣的長名稱:

date_default_timezone_set('America/Chicago');
$date = new DateTime('2/3/2022 02:11:17');

echo "\n" . $date->format('Y-m-d h:i:s T');
/* Displays 2022-02-03 02:11:17 CST "; */

$t = $date->getTimezone();
echo "\nTimezone: " . $t->getName();
/* Displays Timezone: America/Chicago */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM