通过我的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小时!!!
最佳答案
您需要更改MySQL's time zone而不是PHP,或者更改查询,以便PHP提供时间戳,如下所示:
$query = "SELECT * FROM tblLoc WHERE dateTime > (". time() ." - 86400)";
根据评论进行编辑
UTC_TIMESTAMP()
可能是一个不错的方法,但是请确保您也基于相同的时间戳而不是基于CURRENT_TIMESTAMP()
进行插入/更新。UTC时间戳基于格林尼治标准时间(格林威治标准时间),且位于格林尼治标准时间+0。达拉斯参加GMT-6,亚洲/耶路撒冷参加GMT + 2。因此,
UTC_TIMESTAMP()
始终表示GMT时区中的当前时间,无论您当前的时区设置是什么。 CURRENT_TIMESTAMP()
表示当前时区中的当前时间。但是,您的结果可能仍然不太正确。他们可能暂时看起来正确,但可能要过几个小时。但是,如果要基于
CURRENT_TIMESTAMP
进行插入和更新,然后根据UTC_TIMESTAMP
选择,则结果将不正确。我建议以下三种解决方案之一:
将您服务器的时区切换为Asia / Jerusalem(确保重新启动MySQL以应用更改)。
使用“ SET time_zone = timezone;”在每个脚本的开头设置时区。
使用正确的时区创建一个
TZ
环境变量,以便MySQL在启动时将该时区设置为默认时区(同样,请确保重新启动MySQL)。