使用可变时区从PHP转换为UTC

时间:2011-04-24 23:23:44

标签: php mysql time

我使用SQL中的简单时间戳在我的服务器上存储时间戳。当我下拉该时间戳时,我通过以下函数运行它以格式化时间。

如何添加以下函数以将$ timestamp转换为用户查询的任何时区?

// Returns the formatted time
function displayDate($timestamp)
{
    $secAgo = time() - $timestamp;
    // 1 day
    if ($secAgo < 86400)
        return date('h:i:A', $timestamp);
    // 1 week
    if ($secAgo < (86400 * 7))
       return date('l', $timestamp);
    // older than 1 week
    return date('m/t/y', $timestamp);
}

2 个答案:

答案 0 :(得分:3)

如果要更改时区名称,可以使用以下内容:

$date = new DateTime(date('Y-m-d H:i:s', $timestamp), new DateTimeZone('UTC'));
$date->setTimezone(new DateTimeZone('Asia/Vladivostok'));
return $date->format('m/t/y');

Asia/Vladivostok是用户的自定义时区。

答案 1 :(得分:1)

@ zerkms的方法是将时间戳转换为任何时区的最佳方法。

但是如果你每次需要显示一个时间时都这样做,那么它可能会有很大的性能损失,因为你每次都在设置和拆除时区对象。如果页面上的所有时间戳都在同一时区,则有一个方便的快捷方式。 (通常情况是这样,因为用户不会在HTTP请求中间更改时区。)

在函数之外的某处,执行:

date_default_timezone_set('America/New_York');  // or any other timezone

将其与您的会话管理功能联系起来可能是一个好主意,这样同一个用户总能得到相同的时区。

执行此操作后,假设date()表示Unix时间戳,$timestamp将自动开始使用正确的时区。它还会自动校正夏令时。因此,无需更改该功能中的任何内容。

使用timezone_identifiers_list()检索有效时区列表。