将时间戳转换为时区

14

我有一个用户输入的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;
}

查找相对于GMT的时区偏移量,并将其加到您当前的GMT时间戳中。 - Gumbo
时区的完美答案... - Alex
通过 Google 来到这里。你问题中的示例与被接受的答案相同(都使用了 DateTime),我不明白你的问题是什么,因为你说“它完美地工作”。此外,我不明白为什么你接受了一个与你问题中代码完全相同的答案。 - mastazi
1个回答

44

您可以使用PHP 5的DateTime。它允许在时区设置和输出方面进行非常精细的控制。以下是从手册中重新整理的内容:

$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    

这个会处理夏令时吗?还是我们不需要关心,只需要考虑时间差异即可! - zod
@zod 它也会处理夏令时。 - Pekka
1
DateTime::__construct() [<a href='datetime.--construct'>datetime.--construct</a>]:在第8个位置(8)无法解析时间字符串(1438929689):意外字符。 - Shahid Karimi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接