Показать объекты базы данных в течение определенного периода времени

Я хочу отображать контент из базы данных с датами до 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>";
}

Я пробовал несколько разных способов, но я не могу заставить это работать правильно. Помощь и советы?

0

Решение

Причина, по которой ваш код не работает, состоит в том, что 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.

2

Другие решения

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,

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector