Проблемы с отметкой времени PHP в блоге - PullRequest
0 голосов
/ 31 января 2019

Я боролся с этой проблемой уже несколько дней, поэтому я ищу любые идеи, которые могут у вас возникнуть.Я использовал следующее для ввода отметки времени в сообщениях пользователя:

//Timeframe
$date_time_now = date("Y-m-d H:i:s");
$start_date = new DateTime($date_time); //Time of post
$end_date = new DateTime($date_time_now); //Current time
$interval = $start_date->diff($end_date); //Difference between dates 
if($interval->y >= 1) {
    if($interval == 1)
        $time_message = $interval->y . " year ago"; //1 year ago
    else 
        $time_message = $interval->y . " years ago"; //1+ year ago
}
else if ($interval-> m >= 1) {
    if($interval->d == 0) {
        $days = " ago";
    }
    else if($interval->d == 1) {
        $days = $interval->d . " day ago";
    }
    else {
        $days = $interval->d . " days ago";
    }


    if($interval->m == 1) {
        $time_message = $interval->m . " month " . $days;
    }
    else {
        $time_message = $interval->m . " months " . $days;
    }

}
else if($interval->d >= 1) {
    if($interval->d == 1) {
        $time_message = "Yesterday";
    }
    else {
        $time_message = $interval->d . " days ago";
    }
}
else if($interval->h >= 1) {
    if($interval->h == 1) {
        $time_message = $interval->h . " hour ago";
    }
    else {
        $time_message = $interval->h . " hours ago";
    }
}
else if($interval->i >= 1) {
    if($interval->i == 1) {
        $time_message = $interval->i . " minute ago";
    }
    else {
        $time_message = $interval->i . " minutes ago";
    }
}
else {
    if($interval->s < 30) {
        $time_message = "Just now";
    }
    else {
        $time_message = $interval->s . " seconds ago";
    }
}

В HTML-коде у меня это выводится как:

<span class='comment-date'>$time_message</span>

До недавнего времени все работало нормально, я не делалне замечал, пока несколько дней назад, но я подозреваю, что это началось, когда год изменился на 2019. Что происходит, на некоторых постах я получаю следующую ошибку:

Notice: Object of class DateInterval could not be converted to int in C:\xampp\htdocs\LEARN_123\includes\classes\Post.php on line 311

Строка 311 относится к if($interval == 1) в приведенном выше коде.Я также заметил, что для постов старше 1 года это не относится к выражению else $time_message = $interval->y . " years ago"; //1+ year ago.Для некоторых это просто говорит 1 год назад, для других я получаю Notice:

Я прошел через это, но не могу понять это.Может кто-нибудь увидеть, что может происходить, или есть какие-либо указания, как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Просто, чтобы закрыть вопрос и сохранить порядок, я решил опубликовать ответ здесь.Как указано в комментариях, я получаю Notice: на этих б / к, мои условные if($interval == 1) не могут быть преобразованы, так как переменная $interval определена как DateInterval объект.Синтаксис был исправлен на if($interval->y == 1), и теперь он работает, как и ожидалось.

Я пытаюсь оценить лавину, которую могут создавать мелочи, но иногда это просто боль в $$.

0 голосов
/ 31 января 2019

if($interval == 1) должно быть if($interval->y == 1)

Также каждый раз, когда вы спрашиваете if($interval->y|m|d|h|i|s==1, вам не нужно $time_message = $interval->y|m|d|h|i|s . " frame ago";, это может быть просто $time_message = "1 frame ago";, где frame = year, month, day, час, минута, секунда

или вы можете упростить еще и избавиться от лишних операторов if / else с помощью чего-то вроде следующего:

$time_message = $interval->y|m|d|h|i|s . " frame" . ($interval->y|m|d|h|i|s > 1 ? "s " : " ") . ago";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...