过去几个小时我一直在阅读这个主题,我想我已经掌握了它,但我想得到一些确认。
场合
我希望加利福尼亚州的用户能够发布将存储在MySQL中的评论。然后我希望德克萨斯州的用户能够查看评论,并将发布日期调整到他或她的时区。
提议的解决方案
贮藏
date_default_timezone_set('UTC');
$Date = new DateTime();
以UTC格式获取当前日期和时间的DateTime对象。$Date->format()
获取要插入MySQL中日期时间类型列的值。显示
$Date = new DateTime($row['time']);
使用存储的UTC时间实例化DateTime对象。$Date->setTimezone(new DateTimeZone($userTimezone));
将UTC时间调整为用户的时区。$Date->format();
这是必须做的事情的要点吗?我错过了更好的解决方案吗?谢谢你的帮助!
答案 0 :(得分:14)
它可以变得更简单。既然您使用的是JavaScript,那么为什么不使用JavaScript来调整客户端上的时区呢?
这不仅使事情变得更简单,而且还克服了模型的问题。如果我在纽约注册我的帐户但是前往澳大利亚,我希望看到澳大利亚时区的时间。事实上,使用您使用的JavaScript可以轻松调整设置,使设计更加动态。其次,您可以避免存储用户时区的开销。
也就是说,如果你希望你的设计降级到非JavaScript浏览器,那么你最好依靠HTTP cookie采取完整的服务器端方法(而不是依靠JS来获取cookie)。
答案 1 :(得分:3)
你这样做的所有权利。以UTC(GMT + 0)存储所有日期,从数据库中检索它们并应用用户的偏移量。
基本上,你从头到尾都覆盖了这一切,没有什么可以补充的,我认为你不能超越你已经做的那样优化它。