如何正确存储时间,以便日后可以使用用户定义的时区更改时区?你通常如何使用DateTime类来做到这一点?如何正确地为用户定义的时区存储时间?
例如:
您运行论坛脚本。
你的服务器的本地时间是美国
用户A是来自欧盟
用户B是由JP
用户A张贴,并认为基于他在欧盟当地的时间。
用户B在JP当地时间看到用户A的帖子。
我的问题是你应该在什么时区存储时间。你通常如何使用DateTime类来做到这一点?
如何正确存储时间,以便日后可以使用用户定义的时区更改时区?你通常如何使用DateTime类来做到这一点?如何正确地为用户定义的时区存储时间?
例如:
您运行论坛脚本。
你的服务器的本地时间是美国
用户A是来自欧盟
用户B是由JP
用户A张贴,并认为基于他在欧盟当地的时间。
用户B在JP当地时间看到用户A的帖子。
我的问题是你应该在什么时区存储时间。你通常如何使用DateTime类来做到这一点?
以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");
会产生用户的正确日期/时间。
有人说,它必须以GMT或UTC格式保存。但正如你所说的,它应该像我收到时那样得到保存。例如@diEcho上面的评论说先保存到GMT。 所以我想只要它是永久性的(即,默认仅限于美国),脚本中的默认时区是什么并不重要。 这是正确的吗? – IMB 2012-07-28 19:06:19
默认时区是您系统的(服务器)时区。将其保存在用户的时区可能会导致问题,如果他改变它。 – 2012-07-28 19:07:07
为便于携带(即某些流氓管理员更改时区或将应用程序移至新服务器),这是否会有影响?它是否应该像上面的@diEcho注释一样存储在GMT中? – IMB 2012-07-28 19:09:37
标题比内容长。 – diEcho 2012-07-28 18:25:57
我不确定你的意思。你能澄清吗? – 2012-07-28 18:26:45
我在几天之前面临同样的问题。看到我的问题和答案['这里'](http://stackoverflow.com/questions/11137425/datetimediff-isnt-affected-by-timezone-but-always-return-same-value) – diEcho 2012-07-28 18:29:14