场景:
数据库表A
中有一个time
字段保存的是php time()生成的时间戳
mysql使用的时区
未知
php sql语句用到了 FROM_UNIXTIME(time,'%w')
问题:
业务程序中需要切换很多时区
处理数据,虽然php可以动态设置时区,但是Mysql的FROM_UNIXTIME(time,'%w')
执行时区不会被动态设置。
问题是这种情况怎么解决,百度了一圈,发现几个解决办法,但是有几个瓶颈导致百度到的发方法不可用:(1) 业务代码中不可新建连接数据库,根据时区差 通过mysql_query(set xxx)
设置加减几个小时;(2)有人可能提出先查询数据再处理
,这是最坏的打算。
time()生成的时间戳与时区无关
你可以用PHP处理完不同时区的%w再去数据库查询。不要吧计算放在数据库
你往数据库中插入的时候可不可以判断下当前时区,存表的时候将时区一起存储
自己找到一个解决方案是: 数据库使用的是UTC时间,因此可以计算出处理数据的时区与UTC时区的时间差,由此在PHP 的sql 中 在
FROM_UNIXTIME()
通过加减时间差得出正确的时区时间