php-为不同时区的用户存储特定的日期/时间值
作者:互联网
我正在开发一个PHP(CodeIgniter)/ MySQL应用程序,该应用程序允许用户选择何时发布他们的博客文章.到目前为止,我如何设计它的工作方式如下:
>用户在其个人资料中设置时区.
>用户设置博客文章的发布日期.假定此日期/时间基于用户的时区.
>根据用户的时区,发布日期将转换为UTC(00:00).
>转换后的日期在MySQL中存储为DATETIME.
>服务器经常将存储的DATETIME值转换为服务器时区,并在时间到时发布内容.
考虑到我的数据库服务器和Web服务器位于云上的不同计算机上,并且可能会更改位置,因此我想知道是否有更好的方法来处理这种情况.
解决方法:
由于您是在谈论将来的时间安排,因此仅存储UTC不一定是最好的方法.
请记住,时区规则可以(并且确实)会发生变化.如果您对时区数据进行更新(在PHP中,是使用PECL的timezonedb软件包完成的),那么任何已经转换为UTC的数据都可能无效.
更好的解决方案是存储多个值:
>原始的本地日期和时间
>原始时区(例如“ America / New_York”)
> UTC日期和时间,从本地值转换而来
当您想查看是否该运行任务时,可以将当前UTC日期和时间与存储的UTC值进行比较.
当您应用时区更新时,将为所有将来的条目丢弃先前转换的UTC值,并根据更新的数据重新计算新的UTC值.
如果您不这样做,那么您将失去用户最初提供的意图.而且,如果您不更新时区数据,那么您的系统将不会知道世界各地正在发生的各种变化,例如,今年早些时候在埃及进行的更改,或10月在俄罗斯进行的更改.
最后一点-如果实施正确,则服务器的时区应该无关紧要.比较UTC和UTC.
标签:php,mysql,datetime,codeigniter,codeigniter-2 来源: https://codeday.me/bug/20191012/1902480.html