2012-07-28 105 views
0

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

例如:

您运行论坛脚本。

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

用户A是来自欧盟

用户B是由JP

用户A张贴,并认为基于他在欧盟当地的时间。

用户B在JP当地时间看到用户A的帖子。

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

+0

标题比内容长。 – diEcho 2012-07-28 18:25:57

+0

我不确定你的意思。你能澄清吗? – 2012-07-28 18:26:45

+1

我在几天之前面临同样的问题。看到我的问题和答案['这里'](http://stackoverflow.com/questions/11137425/datetimediff-isnt-affected-by-timezone-but-always-return-same-value) – diEcho 2012-07-28 18:29:14

回答

0

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

每个用户都应该将自己的偏好保存在数据库中,格式为PHP's known timezones

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

$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"); 

会产生用户的正确日期/时间。

+0

有人说,它必须以GMT或UTC格式保存。但正如你所说的,它应该像我收到时那样得到保存。例如@diEcho上面的评论说先保存到GMT。 所以我想只要它是永久性的(即,默认仅限于美国),脚本中的默认时区是什么并不重要。 这是正确的吗? – IMB 2012-07-28 19:06:19

+0

默认时区是您系统的(服务器)时区。将其保存在用户的时区可能会导致问题,如果他改变它。 – 2012-07-28 19:07:07

+0

为便于携带(即某些流氓管理员更改时区或将应用程序移至新服务器),这是否会有影响?它是否应该像上面的@diEcho注释一样存储在GMT中? – IMB 2012-07-28 19:09:37

相关问题