在PHP中处理在不同时区存储/显示日期的最佳方法?

Jus*_*ton 29 php mysql timezone datetime date

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

情况

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

提出的解决方案

存储

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

显示

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

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

ale*_*emb 14

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

  1. 以UTC格式在服务器上存储所有时间
  2. 以UTC身​​份为客户提供服务
  3. 客户端使用JavaScript调整本地时区的时间

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

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

  • 如果您正在使用Angular JS,则可以设置过滤器来调整模板中提供的日期. (2认同)