2012-05-12 74 views
2

PHP DateTime對象(更具體地說是DateTimeZone對象),supports many time zones。這一切都很好,但是有沒有辦法將GMT偏移作爲時區傳遞?如何將GMT時區傳遞給PHP DateTime對象?

我知道可以簡單地加上或減去小時並應用一些數學運算,但是我想知道是否有內置的,可靠的做事方式(或者我是否需要爲此創建自己的抽象層) 。

TL; DR如何將GMT+N的值作爲PHP的DateTime或DateTimeZone對象中的時區傳遞?

+0

的護理是很好,如果你可以像歐洲/巴黎添加的東西如時區? – Dhiraj

+1

@DhirajBodicherla:不,重點是用戶應該選擇他的GMT時間,而不是位置時間。我不想做一些奇怪的映射。 –

+0

會有DST的好處,但如果你不需要它,我想它的矯枉過正;-) – alexander255

回答

2

你可以這樣做:

$tz = new DateTimeZone('etc/GMT+2'); 

但是有這樣的警告:

,請不要使用任何這裏(除了UTC)中列出的時區,他們只存在向後兼容的原因。

該列表只支持整個小時。您的某些用戶可能生活在未按小時排列的時區中。另請注意,如果用戶通過UTC偏移量選擇時間,則在夏令時/夏令時期間,他們將不得不每年更換兩次。按地點選擇消除了這種需求。

+0

謝謝你的回答!我的代碼不應該顯示實際的時間,並且DST也被考慮在內。所以我對這個很滿意。謝謝! –

1

你可以嘗試使用「Etc/GMT ??」在http://php.net/manual/timezones.others.php

上列出的時區只能將這些值標記爲「向後兼容的原因」,但如果沒有其他方法可以使用它們,則可以使用它們。請注意,這些值不包括:紐芬蘭等一些地區使用的30個抵消額,所以稍後您會遇到問題。

另一種選擇是手動創建一個數組(),每個時區映射到位於該區域某處區名稱:

array(
    0 => "UTC", 
    1 => "Europe/Paris", 
    ... 
) 
+0

2分鐘太晚了,但您的答案是有效的。由於我實際上沒有顯示實際時間(很複雜),所以很酷。我不知道:30偏移量,我也會考慮這些。謝謝! –

0

爲此,您可以使用DateTime和的setTimestamp

說時間格式是這樣的Sun, 13 May 2012 01:07:00

$currentDate = new DateTime(); 

$currentDate->setTimestamp(strtotime($time.' GMT+0400')); 

注意:你將不得不採取DST

+0

看起來很討厭...我使用'DateTime()'的目的是爲了避免需要'strtotime'或'mkdate'或任何其他討厭的函數!還是)感謝你的建議! –