首页  >  问答  >  正文

php、mysql时区问题

场景:

  1. 数据库表A中有一个time字段保存的是php time()生成的时间戳

  2. mysql使用的时区 未知

  3. php sql语句用到了 FROM_UNIXTIME(time,'%w')

问题:

  1. 业务程序中需要切换很多时区处理数据,虽然php可以动态设置时区,但是Mysql的FROM_UNIXTIME(time,'%w')执行时区不会被动态设置。

  2. 问题是这种情况怎么解决,百度了一圈,发现几个解决办法,但是有几个瓶颈导致百度到的发方法不可用:(1) 业务代码中不可新建连接数据库,根据时区差 通过mysql_query(set xxx) 设置加减几个小时;(2)有人可能提出先查询数据再处理,这是最坏的打算。

怪我咯怪我咯2719 天前318

全部回复(3)我来回复

  • 巴扎黑

    巴扎黑2017-04-11 10:37:54

    time()生成的时间戳与时区无关

    你可以用PHP处理完不同时区的%w再去数据库查询。不要吧计算放在数据库

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-11 10:37:54

    你往数据库中插入的时候可不可以判断下当前时区,存表的时候将时区一起存储

    回复
    0
  • 黄舟

    黄舟2017-04-11 10:37:54

    自己找到一个解决方案是: 数据库使用的是UTC时间,因此可以计算出处理数据的时区与UTC时区的时间差,由此在PHP 的sql 中 在FROM_UNIXTIME() 通过加减时间差得出正确的时区时间

    回复
    0
  • 取消回复