PHP DateTime對象(更具體地說是DateTimeZone對象),supports many time zones。這一切都很好,但是有沒有辦法將GMT偏移作爲時區傳遞?如何將GMT時區傳遞給PHP DateTime對象?
我知道可以簡單地加上或減去小時並應用一些數學運算,但是我想知道是否有內置的,可靠的做事方式(或者我是否需要爲此創建自己的抽象層) 。
TL; DR如何將GMT+N
的值作爲PHP的DateTime或DateTimeZone對象中的時區傳遞?
PHP DateTime對象(更具體地說是DateTimeZone對象),supports many time zones。這一切都很好,但是有沒有辦法將GMT偏移作爲時區傳遞?如何將GMT時區傳遞給PHP DateTime對象?
我知道可以簡單地加上或減去小時並應用一些數學運算,但是我想知道是否有內置的,可靠的做事方式(或者我是否需要爲此創建自己的抽象層) 。
TL; DR如何將GMT+N
的值作爲PHP的DateTime或DateTimeZone對象中的時區傳遞?
你可以這樣做:
$tz = new DateTimeZone('etc/GMT+2');
但是有這樣的警告:
,請不要使用任何這裏(除了UTC)中列出的時區,他們只存在向後兼容的原因。
該列表只支持整個小時。您的某些用戶可能生活在未按小時排列的時區中。另請注意,如果用戶通過UTC偏移量選擇時間,則在夏令時/夏令時期間,他們將不得不每年更換兩次。按地點選擇消除了這種需求。
謝謝你的回答!我的代碼不應該顯示實際的時間,並且DST也被考慮在內。所以我對這個很滿意。謝謝! –
你可以嘗試使用「Etc/GMT ??」在http://php.net/manual/timezones.others.php
上列出的時區只能將這些值標記爲「向後兼容的原因」,但如果沒有其他方法可以使用它們,則可以使用它們。請注意,這些值不包括:紐芬蘭等一些地區使用的30個抵消額,所以稍後您會遇到問題。
另一種選擇是手動創建一個數組(),每個時區映射到位於該區域某處區名稱:
array(
0 => "UTC",
1 => "Europe/Paris",
...
)
2分鐘太晚了,但您的答案是有效的。由於我實際上沒有顯示實際時間(很複雜),所以很酷。我不知道:30偏移量,我也會考慮這些。謝謝! –
爲此,您可以使用DateTime和的setTimestamp
說時間格式是這樣的Sun, 13 May 2012 01:07:00
$currentDate = new DateTime();
$currentDate->setTimestamp(strtotime($time.' GMT+0400'));
注意:你將不得不採取DST
看起來很討厭...我使用'DateTime()'的目的是爲了避免需要'strtotime'或'mkdate'或任何其他討厭的函數!還是)感謝你的建議! –
的護理是很好,如果你可以像歐洲/巴黎添加的東西如時區? – Dhiraj
@DhirajBodicherla:不,重點是用戶應該選擇他的GMT時間,而不是位置時間。我不想做一些奇怪的映射。 –
會有DST的好處,但如果你不需要它,我想它的矯枉過正;-) – alexander255