如何为不同地点设置时区?

时间:2013-04-01 09:14:03

标签: php timezone

我对设置时区非常困惑。 我正在用PHP开发一个论坛,因为我不确定是否显示回复的时间。

以下是条件,

有一个问题发布于2013年4月1日上午10点(时区'亚洲/加尔各答')。有人在2013年3月31日晚11点30分迅速回复,因为回复的人的时区是“美国/芝加哥”,即-10.30小时。

我的问题是如何管理不同地点的时区?

在上面的示例中,显示给发布问题并获得回复的用户的时间应该是什么?

应该回复问题的用户显示的时间是什么?

我使用PHP的时间函数作为字符串在数据库中插入时间记录。 并显示我用过的时间

date("d m Y h:m a", strtotime($time));

以上代码$ time是来自数据库的值。

谢谢..

2 个答案:

答案 0 :(得分:3)

我会使用gmdate()将日期和时间存储到数据库中,以使它们基于GMT:

$d = gmdate('Y-m-d H:i:s');
// store $d into database

在渲染页面时,您会考虑用户的时区偏好:

date_default_timezone_set('Asia/Singapore');
$ts = strtotime($date_from_db . ' GMT');
$date_on_page = date('Y-m-d H:i:s', $ts);

或者你可以让JavaScript处理时间转换。

<强>更新

您还可以在数据库中存储UNIX时间戳;我个人喜欢有DATETIME列,因为当你尝试调试时,这些列更容易解码:)

答案 1 :(得分:0)

date_default_timezone_set('America/New_York'); 

此函数用于在php中使用默认时区。

这是tutorial的链接。

要更改时区使用:

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";

以下是timezones

的列表