在PHP和MySQL上处理时区的最佳方法是什么?

Ren*_*aro 11 php mysql timezone

我目前正在研究在我的网站上处理时区的最佳方法.来自许多不同国家的人会同时访问它,我必须向他们展示基于时间的信息,所以我想:

根据我的服务器每次存储在数据库上(相同的时区,由PHP定义)然后,用户可以选择他的时区,我使用mysql函数DATEADD进行所需的转换.

这似乎工作正常,但我的问题是:

  • 这是最好的方法吗?
  • DATEADD是处理小时差异最有效的功能吗?

谢谢.

egg*_*yal 7

MySQL服务器时区支持中所述:

当前会话时区设置会影响区域敏感的时间值的显示和存储.这包括由诸如NOW()or之类的函数显示的值CURTIME(),以及存储在TIMESTAMP列中和从列中检索的值.TIMESTAMP列的值将从当前时区转换为UTC以进行存储,并从UTC转换为当前时区以进行检索.

因此,如果您使用TIMESTAMP类型列,MySQL将自动为您处理时区转换:只需在其time_zone变量中为会话设置适当的时区.

  • @RenatoSiqueiraMassaro:如果将`NOW()`存储到`TIMESTAMP`列中,那么MySQL将保留当前UTC时间.当您随后检索该列的值时,它将转换为当前会话的时区.例如,如果我的会话在"UTC + 05:00"中,现在时间是我当地时区的"09:30",那么将存储"04:30",并且当我获取时将检索"09:30"数据. (2认同)