从我的Android智能手机应用程序(由我自己制作)中,我向丹佛的服务器发送请求以保存我的位置和时间。它保存的TIMESTAMP
是丹佛当前时间(与当地时间相差9小时)。从我上一次请求的16个小时后,我在我的PHP脚本中写道
$query = "SELECT * FROM `tblLoc` WHERE datetime > (CURRENT_TIMESTAMP - 86400)";
好像我想在24小时后告诉我......
这是错误的!
$query = "SELECT * FROM `tblLoc` WHERE datetime > CURRENT_TIMESTAMP() - INTERVAL 24 HOUR";
SQL 86400中的!= 24小时!!!
答案 0 :(得分:1)
您需要更改MySQL's time zone而不是PHP,或更改您的查询以便PHP提供时间戳,如下所示:
$query = "SELECT * FROM tblLoc WHERE dateTime > (". time() ." - 86400)";
<小时/> 根据评论
编辑
UTC_TIMESTAMP()
可能是一个很好的方法,但请确保您同时根据同一时间戳插入/更新,而不是基于CURRENT_TIMESTAMP()
。
UTC时间戳基于GMT(格林威治标准时间),格林威治标准时间+0。达拉斯是GMT-6,亚洲/耶路撒冷是GMT + 2。因此UTC_TIMESTAMP()
始终表示GMT时区中的当前时间,无论您当前的时区设置是什么。 CURRENT_TIMESTAMP()
表示当前时区的当前时间。
但您的搜索结果可能仍然不太合适。他们可能目前只是看起来正确,但可能会在几个小时后关闭。但是,如果您要根据CURRENT_TIMESTAMP
插入和更新,然后根据UTC_TIMESTAMP
进行选择,那么您的搜索结果将不正确。
我建议使用以下三种解决方案之一:
TZ
环境变量,以便MySQL在启动时将该时区设置为默认值(同样,请确保重新启动MySQL)。