php存取不同时区的时间,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值