我想显示数据库中的内容,并且要提前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>";
}
我尝试了几种不同的方法,但似乎无法正常工作。帮助和提示?
答案 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
中的任何时间。