2011-03-07 44 views
1

我们想获取今天添加的所有行,我们有列名dnt(timestamp),但我们的时间表比服务器时区早12小时。那么,什么是SQL查询来获得当前结果。我们正在使用以下目前...选择所有日期等于今天与时区差异

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

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

谢谢。

回答

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

+0

我们如何知道源和desti国家时区? – seoppc 2011-03-07 14:18:57

+0

源时区是'dnt'的时区,目标时区是数据库本身的时区(通常是服务器的时区)。 – BigFatBaby 2011-03-07 15:30:47

2

我建议所有日期应存储在GMT时区。然后在显示时间的视图中进行转换。这样,当您需要查询某个日期时,首先将客户端日期转换为GMT,并将其直接传递给您的SQL查询。 SQL服务器有一些函数来获取GMT日期而不是服务器日期。您还可以将GMT时区中的当前日期作为查询参数传递,而不是使用SQL函数(使用PHP函数获取gmt日期)。

参见:gmmktime例如