2012-06-20 119 views
0

可能重複:
Timezone conversion in php轉換成時間戳多個時區

這裏是什麼,我想做一個簡單的例子。

我有一個變量$time包含一個時間戳。

現在,我想將其轉換成不同的時區

有沒有辦法做到這一點,而無需使用功能date_default_timezone_set()多次的時間戳?

我知道我的觀點可能看起來很混亂,而且點數也較少,所以請澄清評論中的任何疑問。

如果我有,例如,100個電話去改變它: -

  1. 它會影響我其他的功能
  2. 功能顧名思義它的默認
  3. 它減慢腳本。
+0

你調用該函數有什麼確切的問題? :) –

+0

準確地說,我的觀點。而不是寫在這裏,你應該考慮在問題本身中包含這些信息:) –

回答

2

可以使用DateTime對象,並設置時區使用SetTimezone()方法所需。

例如,下面的代碼: -

$datetime = new DateTime(); 
var_dump($datetime->getTimezone()->getName()); 
var_dump($datetime->format(DateTime::ISO8601)); 
$datetime->setTimezone(new DateTimeZone('UTC')); 
var_dump($datetime->format(DateTime::ISO8601)); 
$datetime->setTimezone(new DateTimeZone('America/New_York')); 
var_dump($datetime->format(DateTime::ISO8601)); 

給我下面的輸出: -

string 'Europe/London' (length=13) 
string '2012-06-20T20:33:29+0100' (length=24) 
string '2012-06-20T19:33:29+0000' (length=24) 
string '2012-06-20T15:33:29-0400' (length=24) 

我的開發服務器默認TZ是歐洲/倫敦,所以你可能會稍有不同的結果。

有一個supported timezones here的列表。

+0

哈哈。我明白:P我也張貼從我的android:P – kritya

+0

這裏有一些基於DateTime的時區轉換示例 - http://blog.serverdensity.com/2009/03/21/handling-timezone-conversion-with-php-約會時間/ – anjunatl

0

爲了給您提供了創建在不同的時區的日期。這裏做了一些香港專業教育學院的一個樣本是我做了什麼

function create_date($format, $time, $offset = -6) 
{ 
    return gmdate($format, $time + (3600 * $offset)); 
} 

如果你想記住這時間戳格式只是修改看起來像這樣。

function create_date($time, $offset = -6) 
{ 
    return $time + (3600 * $offset); 
} 

UPDATE:

如果您需要在文本形式時區進入我就從PHP Timezone List問題使用列表,然後在功能做一個簡單的查找該陣列上獲得的偏移做這個工作。

注意:

這正常工作,原來的時間必須是GMT時間

+0

這需要像舊方法一樣輸入偏移量。這意味着我必須抵消每個時區。當php有我們的數據我想用某種方式:) – kritya

+0

@kritya請參閱更新。我假設你的意思是你想要做一些像create_date(123456789,'US/Eastern'); – bretterer

+0

你有什麼數據?只有一個時間戳,並且您希望其他時間區域的其他時間有23次相同的時間戳? – NaturalBornCamper