我正在使用Drupal 7、PHP和MySQL,并在从MySQL数据库查询时试图解决时区问题。
Drupal很好地处理日期:所有的日期都以UTC时间戳int的形式存储在db中,而时区转换通过每个用户配置文件中的时区设置进行,使用PHP 5的内置时区功能(因此每次运行PHP脚本时,脚本的时区设置为当前用户的时区)。
因此,只要我们坚持使用PHP,这一切都是很好的、很好的、相当无痛的。
当我们引入MySQL、时,事情开始变得棘手起来,因为似乎没有一种方法可以将当前的MySQL脚本时区与给定的MySQL查询完美地同步。最佳实践似乎要求处理PHP中的所有时区转换:只有在数据库中查询原始时间戳,然后根据需要在PHP中进行转换。
在大多数情况下,这似乎是合理的(即使有时速度有点慢),,但是我应该如何处理MySQL组的日期查询呢?例如,我正在构建一个处理分析的模块,并且经常想要这样做:
GROUP BY YEAR(FROM_UNIXTIME(u.created)), MONTH(FROM_UNIXTIME(u.created))
所以我们遇到时区问题..。
已经想到的可能的解决办法:
所以我想我要问的是,我错过了什么吗?这里有我不知道的最佳做法吗?
非常感谢你的帮助!
发布于 2013-02-06 09:52:16
我会考虑这样的方法
SET time_zone = '+02:00';
http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html
并有
GROUP BY FROM_UNIXTIME(u.created, '%Y-%m');
由于FROM_UNIXTIME
是建立在time_zone
的基础上的,所以这应该会给出预期的结果。
若要撤消time_zone
更改,请考虑先保存SELECT TIMEDIFF(NOW(), CONVERT_TZ(now(), @@session.time_zone, '+00:00'));
,然后将其设置为保存后的值。
https://stackoverflow.com/questions/14725240
复制相似问题