我们想获取今天添加的所有行,我们有列名dnt(timestamp),但我们的时间表比服务器时区早12小时。那么,什么是SQL查询来获得当前结果。我们正在使用以下目前...选择所有日期等于今天与时区差异
SELECT * FROM messages WHERE user ='$ user'AND DATE(dnt)= CURDATE();
但由于时区差异,它没有给出正确的结果。
谢谢。
我们想获取今天添加的所有行,我们有列名dnt(timestamp),但我们的时间表比服务器时区早12小时。那么,什么是SQL查询来获得当前结果。我们正在使用以下目前...选择所有日期等于今天与时区差异
SELECT * FROM messages WHERE user ='$ user'AND DATE(dnt)= CURDATE();
但由于时区差异,它没有给出正确的结果。
谢谢。
我与@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
我建议所有日期应存储在GMT时区。然后在显示时间的视图中进行转换。这样,当您需要查询某个日期时,首先将客户端日期转换为GMT,并将其直接传递给您的SQL查询。 SQL服务器有一些函数来获取GMT日期而不是服务器日期。您还可以将GMT时区中的当前日期作为查询参数传递,而不是使用SQL函数(使用PHP函数获取gmt日期)。
参见:gmmktime例如
我们如何知道源和desti国家时区? – seoppc 2011-03-07 14:18:57
源时区是'dnt'的时区,目标时区是数据库本身的时区(通常是服务器的时区)。 – BigFatBaby 2011-03-07 15:30:47