29

在过去的几个小时里,我一直在阅读这个主题,我想我已经掌握了它,但我想要一些确认。

情况

我希望加利福尼亚州的用户能够发布将存储在 MySQL 中的评论。然后,我希望德克萨斯州的用户能够查看评论,并将发布日期调整为他或她的时区。

建议的解决方案

存储

  1. 在应用程序启动时运行以下命令,以便所有日期函数都使用 UTC 时区:date_default_timezone_set('UTC');
  2. $Date = new DateTime();以 UTC 获取具有当前日期和时间的 DateTime 对象。
  3. 用于$Date->format()获取要插入 MySQL 中日期时间类型列的值。

显示

  1. 从 JavaScript 中获取用户的时区信息并将其存储在 cookie 中。
  2. 运行 MySQL SELECT 查询以检索日期时间列值。
  3. $Date = new DateTime($row['time']);用存储的 UTC 时间实例化一个 DateTime 对象。
  4. $Date->setTimezone(new DateTimeZone($userTimezone));将 UTC 时间调整为用户的时区。
  5. 显示使用$Date->format();

这就是必须要做的事情的要点吗?我错过了更好的解决方案吗?谢谢你的帮助!

4

2 回答 2

14

它还可以变得更简单。既然您使用的是 JavaScript,那么为什么不使用 JavaScript 来调整客户端的时区呢?

  1. 将服务器上的所有时间存储为 UTC
  2. 将它们作为 UTC 提供给客户
  3. 客户端使用 JavaScript 将时间调整为本地时区

这不仅使事情变得更简单,而且还克服了模型的问题。如果我在纽约注册了账户但去澳大利亚旅行,我想查看澳大利亚时区的时间。事实上,使用您使用的 JavaScript 可以轻松调整设置,使设计更加动态。其次,您可以避免存储用户时区的开销。

也就是说,如果您希望您的设计降级到非 JavaScript 浏览器,那么您最好采用完全依赖 HTTP cookie 的服务器端方法(而不是依赖 JS 来获取 cookie)。

于 2009-02-05T23:08:41.443 回答
3

你做这一切的权利。以 UTC(GMT+0) 存储所有日期,从数据库中检索它们并应用用户的偏移量。

从本质上讲,您已经从头到尾都涵盖了所有内容,实际上没有什么可添加的,我认为您无法优化它超出您已经做的事情。

于 2009-02-05T22:43:25.893 回答