我们想要获取今天添加的所有行,我们有列名dnt(时间戳),但我们的timezome比服务器时区提前12小时。那么什么是SQL查询来获得当前结果。我们目前正在使用以下......
SELECT * FROM messages WHERE user ='$ user'AND DATE(dnt)= CURDATE();
但由于时区差异,它没有给出正确的结果。
感谢。
答案 0 :(得分:2)
我建议所有日期都应存储在GMT时区。然后在显示时在视图中转换。这样,当您需要查询某个日期时,首先将客户端日期转换为GMT并将其直接传递给SQL查询。 SQL服务器具有一些函数来获取GMT日期而不是服务器日期。您还可以将GMT时区中的当前日期作为查询参数传递,而不是使用SQL函数(使用PHP函数获取gmt日期)。
请参阅:gmmktime例如
答案 1 :(得分:1)
我同意@MarvinLabs - 这是一个设计缺陷。
但是如果您希望保留设计原样,则应使用此代码:
SELECT *
FROM messages
WHERE user = '$user'
AND DATE(CONVERT_TZ(dnt,'source_timezone','destination_timezone')) = CURDATE()
相应更改source-timezone
和destination_timezone
MySQL CONVERT_TZ()参考:here