如何为用户定义的时区正确存储时间


How to store time properly for user defined timezone?

如何正确存储时间,以便以后可以使用用户定义的时区更改时区?使用DateTime类通常是如何做到这一点的?

例如:

你运行了一个论坛脚本。

您的服务器的本地时间是美国

用户A来自欧盟

用户B来自JP

用户A根据他在欧盟的当地时间发布并查看时间。

用户B在JP.的本地时间看到用户A的帖子

我的问题是你应该把时间存储在哪个时区。使用DateTime类通常是如何做到这一点的?

以UTC格式保存时间,以实现稳定性和一致性。

每个用户的偏好都应该以PHP的已知时区的形式保存在数据库中。

然后,在显示时,将时间更改为正确的时区。

$time = "13:37 2012-12-21";
$datetime = new DateTime($time);
$user_timezone = new DateTimeZone($user_timezone_from_the_database);
$datetime->setTimezone($user_timezone);
$datetime->format("H:i:s Y-m-d");

将为用户提供正确的日期/时间。