2010-11-15 225 views
12

我有用戶在GMT中輸入的時間戳。將時間戳轉換爲時區

我會那麼喜歡GMT,CET,pst文件來顯示時間戳,EST。

得益於以下後我做了,這完美的作品!

public static function make_timezone_list($timestamp, $output='Y-m-d H:i:s P') { 

    $return  = array(); 
    $date  = new DateTime(date("Y-m-d H:i:s", $timestamp)); 
    $timezones = array(
     'GMT' => 'GMT', 
     'CET' => 'CET', 
     'EST' => 'EST', 
     'PST' => 'PST' 
    ); 

    foreach ($timezones as $timezone => $code) { 
     $date->setTimezone(new DateTimeZone($code)); 
     $return[$timezone] = $date->format($output); 
    } 
    return $return; 
} 
+0

查找相對於GMT的時區偏移量並將其添加到GMT中的當前時間戳中。 – Gumbo 2010-11-15 17:05:20

+0

完美答案時區... http://stackoverflow.com/a/3905222/1266559 – Magefast 2013-10-25 20:35:48

+0

通過Google來到這裏。你問題中的例子與接受的答案(它使用DateTIme)是一樣的,我不明白你說「它工作正常」是什麼問題。另外我不明白你爲什麼接受的答案與你問題中的代碼完全一樣。 – mastazi 2016-02-11 04:34:39

回答

32

您可以使用PHp 5的DateTime class。它允許對時區設置和輸出進行非常細緻的控制。從手冊中重新混合:

$timestamp = .......; 


$date = new DateTime("@".$timestamp); // will snap to UTC because of the 
             // "@timezone" syntax 

echo $date->format('Y-m-d H:i:sP') . "<br>"; // UTC time 

$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date->format('Y-m-d H:i:sP') . "<br>"; // Pacific time 

$date->setTimezone(new DateTimeZone('Europe/Berlin')); 
echo $date->format('Y-m-d H:i:sP') . "<br>"; // Berlin time  
+0

這個處理日還會節省嗎?或者我們不必關心,只需要時間差! – zod 2010-11-15 17:48:39

+0

@zod它也會處理DST。 – 2010-11-15 19:45:33

+1

ateTime :: __ construct()[datetime.--construct]:無法解析位置8(8)處的時間字符串(1438929689):意外字符 – 2015-08-07 06:41:57

相關問題