[英]Get longer time zone name in PHP
通常,您不應該信任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個不同的時區
默認的IST對象將引用第一次出現的對象,然后我們將再有2個對象IST100和IST200來處理愛爾蘭和以色列的標准時間。 請注意,100個200后綴從時區的偏移來,例如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.