我使用
成功获取了昨天的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中使用它。
答案 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'))