如果你想知道一個國家的時區,你可以使用
print_r(
DateTimezone::listIdentifiers(
DateTimeZone::PER_COUNTRY,
'DE'
)
);
這將給你喜歡的輸出:
Array
(
[0] => Europe/Berlin
[1] => Europe/Busingen
)
布辛根會更接近Albstadt,但這並不重要,因爲德國只有一個時區,即CET(夏季CEST),所以兩者都可以使用。但對於擁有多個時區的國家來說,這隻會讓你縮小範圍,而不是精確定位它。
You can also use GMT,儘管它不建議,因爲
警告:請不要使用任何這裏列出(除了UTC)的時區,他們只存在向後兼容的原因,有可能引致錯誤的行爲。
但是,它的工作:
date_default_timezone_set('Etc/GMT+10');
echo date(DATE_ATOM); // prints 2017-02-17T10:10:24-10:00
併爲CET:
date_default_timezone_set('CET');
echo date(DATE_ATOM); // 2017-02-17T21:31:35+01:00
確保通過http://www.iana.org/time-zones/repository/tz-link.html瞭解更多詳情閱讀。 IANA是PHP使用的時區數據庫的維護者。特別是,該位是很重要的:
數據庫中的每個位置表示保持本地時間所有的時鐘都同意從1970年開始位置是由大陸或海洋鑑定,然後通過位置的名稱,一個區域,該區域通常是該地區內最大的城市。例如,America/New_York代表美國東部大部分時區;美洲/菲尼克斯代表亞利桑那州的大部分地區,它使用沒有夏令時(DST)的山地時間;美國/底特律代表了密歇根州的大部分地區,它使用東部時間,但在1975年有不同的DST規則;其他條目代表較小的區域,例如印第安納州的Starke County,它在1991年從中央時間切換到東部時間,並在2006年切換。爲了在擴展的POSIX實施中使用數據庫,將TZ環境變量設置爲位置的全名,例如TZ = 「美國/紐約」。
還要注意大段標題爲時區邊界在同一頁上。
您可能也有興趣How to get a time zone from a location using latitude and longitude coordinates?
某人,某個地方,將不得不維持,因爲這個東西的更改列表。我不確定是否有比查詢某個列表或API更好的答案。 – NathanOliver
特別是,它是IANA:http://www.iana.org/time-zones/repository/tz-link.html – Gordon
按照您建議的方式執行此操作的一個問題是它不考慮DST。舉個例子,[America/Sao_Paulo](http://php.net/manual/en/timezones.america.php)和America/Bahia都是GMT -3,但是America/Sao_Paulo巴西夏令時,而「美國/巴伊亞」不。 – duplode