显示特定时间范围内的数据库实体

v7pvogib  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(240)

我想显示的内容,从数据库与日期最多提前2小时。
例子:

2018-11-09 20:00:00.000000
2018-11-08 19:00:00.000000
2018-11-06 19:00:00.000000
2018-11-06 18:00:00.000000

假设时间和日期是11月6日下午6点。我想底部的两个条目显示和两个未来的日期不显示,直到目前的时间是在2小时内的时间。
我的代码如下:

$cT = strtotime($row3['MissionTime']) - strtotime("now");
                         if($cT <= strtotime('-2 hours')) {
                                 echo $row3['MissionTime']."<br>";
                            }

我试过几种不同的方法,但我似乎无法使它正常工作。帮助和提示?

ekqde3dh

ekqde3dh1#

你的代码不起作用的原因是 strtotime 返回自unix纪元以来的秒数。当你减去 strtotime 你会得到一个秒数的差异,这是你所期望的。但是,您不能将该值与 strtotime('-2 hours') 因为它的输出将是2小时前的时间戳(现在是1541539906),所以测试将始终通过。你应该把它和7200比较一下(根据你的问题描述,我很确定+7200比-7200更合适)。所以改变吧

if($cT <= strtotime('-2 hours')) {

if($cT <= 7200) {

请注意,在查询中这样做几乎肯定更好。试着在你的时间栏上添加一个条件,比如

WHERE MissionTime <= NOW() + INTERVAL 2 HOUR

然后您就不需要签入php了。

monwx1rj

monwx1rj2#

strtotime() 返回以秒为单位的时间戳。减去两个时间戳可以得到这两个时间戳之间的差值(以秒为单位)。
所以如果 strtotime($row3['MissionTime']) 是未来1.5小时的时间戳,你减去 strtotime("now") 从中,你会得到不同的结果 5400 秒(60秒60分钟1.5小时)。 strtotime('-2 hours') 给出2小时前的时间戳,目前大约在15亿左右。这对你的情况不是很有用。
以下是修改代码的两种方法:

$cT = strtotime($row3['MissionTime']) - strtotime("now");
if($cT <= 7200) {
    echo $row3['MissionTime']."<br>";
}

如果 $row['MissionTime'] 以及 now 小于 7200 秒(60秒60分钟2小时), $row3['MissionTime'] 不是过去就是两小时之内。
或者:

if(strtotime($row3['MissionTime']) <= strtotime('+2 hours')) {
    echo $row3['MissionTime']."<br>";
}

基本上是一样的,但是如果你不打算使用的话,可能更容易阅读 $cT 为了别的。这只是检查 $row3['MissionTime'] 比任何时候都要早 +2 hours .

相关问题