Я хочу отображать контент из базы данных с датами до 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
Скажем время и дата
6 ноября в 18:00. Я хочу, чтобы отображались две нижние записи, а две будущие даты не показывались, пока текущее время не наступит в течение 2 часов с того времени.
Мой код выглядит следующим образом:
$cT = strtotime($row3['MissionTime']) - strtotime("now");
if($cT <= strtotime('-2 hours')) {
echo $row3['MissionTime']."<br>";
}
Я пробовал несколько разных способов, но я не могу заставить это работать правильно. Помощь и советы?
Причина, по которой ваш код не работает, состоит в том, что 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.
strtotime()
возвращает метку времени в секундах. Вычитание двух временных меток дает вам разницу между этими двумя временными метками в секундах.
Так что если strtotime($row3['MissionTime'])
это временная метка, это 1,5 часа в будущем, и вы вычтете strtotime("now")
от этого вы в конечном итоге с разницей 5400
секунд (60 секунд * 60 минут * 1,5 часа).
strtotime('-2 hours')
дает вам метку времени на 2 часа назад, которая в настоящее время составляет около 1,5 миллиарда. Это не очень полезно для вашей ситуации.
Вот два способа изменить ваш код:
$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
,