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

时间:2018-11-06 23:19:57

标签: php mysql date time

我想显示数据库中的内容,并且要提前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>";
                            }

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

2 个答案:

答案 0 :(得分:2)

您的代码无效的原因是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。

答案 1 :(得分:1)

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分钟*两个小时),则$row3['MissionTime']是过去的或者是在接下来的两个小时内。

或者:

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

基本相同,但如果您不打算将$cT用于其他任何内容,则可能更具可读性。这只是检查$row3['MissionTime']是否早于+2 hours中的任何时间。