在过去的几个小时里,我一直在阅读这个主题,我想我已经掌握了它,但我想要一些确认.
情况
我希望加利福尼亚州的用户能够发布将存储在MySQL中的评论.然后,我希望德克萨斯州的用户能够查看评论,并将发布日期调整到他或她的时区.
提出的解决方案
存储
在应用程序开始时运行以下命令,以便所有日期函数都使用UTC时区: date_default_timezone_set('UTC');
$Date = new DateTime();
获取具有UTC当前日期和时间的DateTime对象.
使用$Date->format()
来获取值插入到MySQL中的datetime类型列.
显示
从JavaScript获取用户的时区信息并将其存储在cookie中.
运行MySQL SELECT查询以检索datetime列值.
$Date = new DateTime($row['time']);
使用存储的UTC时间实例化DateTime对象.
$Date->setTimezone(new DateTimeZone($userTimezone));
将UTC时间调整为用户的时区.
显示使用 $Date->format();
这是必须做的事情的要点吗?我错过了更好的解决方案吗?谢谢你的帮助!
它可以变得更简单.既然您使用的是JavaScript,那么为什么不使用JavaScript来调整客户端上的时区呢?
以UTC格式在服务器上存储所有时间
以UTC身份为客户提供服务
客户端使用JavaScript调整本地时区的时间
这不仅使事情变得更简单,而且还克服了模型的问题.如果我在纽约注册我的帐户但是前往澳大利亚,我希望看到澳大利亚时区的时间.事实上,使用您使用的JavaScript可以轻松调整设置,使设计更加动态.其次,您可以避免存储用户时区的开销.
也就是说,如果您希望您的设计降级到非JavaScript浏览器,那么您最好采用依赖HTTP cookie的完整服务器端方法(而不是依靠JS来获取cookie).