通过访问者的时区获取昨天的mySQL数据

时间:2013-04-04 22:30:10

标签: php mysql

我使用

成功获取了昨天的mySQL数据
SELECT COUNT(*) as total FROM  track
WHERE  FROM_UNIXTIME(date,'%Y-%m-%d %h:%m:%s') > DATE_ADD(NOW(), INTERVAL -2 DAY) 
AND FROM_UNIXTIME(date,'%Y-%m-%d %h:%m:%s') < DATE_ADD(NOW(), INTERVAL -1 DAY)

但是,它使用服务器的时区。我的服务器位于美国,如果访客来自与美国不同的时区(例如:亚洲或欧洲),我的昨天数据对用户来说是不正确的。我想根据访问者的时区获取正确的昨天结果。我可以在php中获取访问者时区,但我无法弄清楚如何在mySQL中使用它。

1 个答案:

答案 0 :(得分:5)

不要将时间存储为UNIX时间戳,而是存储为TIMESTAMP。然后你可以简单地设置time_zone,一切都将按你的意愿转换:

SET time_zone = '+10:00';

SELECT COUNT(*) AS total
FROM   track
WHERE  date > NOW() - INTERVAL 2 DAY
   AND date < NOW() - INTERVAL 1 DAY

否则,您可以使用CONVERT_TZ()

SELECT COUNT(*) AS total
FROM   track
WHERE  date > UNIX_TIMESTAMP(CONVERT_TZ(NOW() - INTERVAL 2 DAY, '+3:00', '+10:00'))
   AND date < UNIX_TIMESTAMP(CONVERT_TZ(NOW() - INTERVAL 1 DAY, '+3:00', '+10:00'))