2010-11-15 196 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