选择所有日期等于今天的时区差异

时间:2011-03-07 10:42:58

标签: php mysql date

我们想要获取今天添加的所有行,我们有列名dnt(时间戳),但我们的timezome比服务器时区提前12小时。那么什么是SQL查询来获得当前结果。我们目前正在使用以下......

SELECT * FROM messages WHERE user ='$ user'AND DATE(dnt)= CURDATE();

但由于时区差异,它没有给出正确的结果。

感谢。

2 个答案:

答案 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-timezonedestination_timezone

  • MySQL CONVERT_TZ()参考:here