我想知道如何在用户设置自己的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时间的最佳方法是什么?
答案 0 :(得分:3)
这没有意义。
您不应让用户选择GMT偏移量,否则:
你应该做的是让他从列表中选择一个实际的时区(例如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'];