2

我正在使用成功获取昨天的 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 中使用它。

4

1 回答 1

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'))
于 2013-04-04T22:51:17.073 回答