用户最好的GMT时间配置| PHP

时间:2010-08-27 00:42:35

标签: php datetime time timestamp

我想知道如何在用户设置自己的GMT时间时进行最佳用户配置,例如:如果用户处于GMT + 3时区并且用户通过UCP设置它。

我所做的是,下拉菜单中的每个选项:

<select name="timezone">
    ...
    <option value="-7200">GMT-2</option>
    <option value="-3600">GMT-1</option>
    <option value="0">GMT</option>
    <option value="3600">GMT+1</option>
    <option value="7200">GMT+2</option>
    ...
</select>

就像这样,当用户选择它时,它会将值添加到数据库的用户字段中。

我坚持的是当用户创建帖子时,它使用time()标记,我使用gmdate()函数:

while(loop goes here)
{
    $post_time = $row['post_time'] // e.g. 1282165261

    if($row['user_timezone'] > 0)
    {
        $timezone = $post_time-$row['user_timezone'];
    }
    else
    {
        $timezone = $post_time+$row['user_timezone'];
    }
}

使用此时间戳格式输出:

gmdate("D jS M Y @ g:iA", $timezone);

但问题是,如果我使用低于GMT的东西,例如GMT-1,GMT-6,它变为+

问题是,将时间戳配置为用户首选GMT时间的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

这没有意义。

您不应让用户选择GMT偏移量,否则:

  • 他必须在每次DST过渡时更改它。
  • 当他在DST时,他会在DST之外的时间看到错误的时区,反之亦然。

你应该做的是让他从列表中选择一个实际的时区(例如Europe/Lisbon)。

答案 1 :(得分:2)

问题在于:

if($row['user_timezone'] > 0)
{
    $timezone = $post_time-$row['user_timezone'];
}
else
{
    $timezone = $post_time+$row['user_timezone'];
}

如果你仔细看看它,你会发现它等同于:

$timezone = $post_time - abs($row['user_timezone']);

您应该将其替换为:

$timezone = $post_time - $row['user_timezone'];