问题W于博客帖子/ PHP时间戳

时间:2019-01-31 20:08:05

标签: php datetime

我已经为这个问题苦苦挣扎了几天,所以我正在寻找您可能有的见解。我一直在使用以下内容在用户帖子中输入时间戳:

//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 :(得分:0)

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"; 其中框架=年,月,日,时,分,秒

或者,您可以简化以下内容,并使用以下类似的代码摆脱多余的if / else语句:

$time_message = $interval->y|m|d|h|i|s . " frame" . ($interval->y|m|d|h|i|s > 1 ? "s " : " ") . ago";

答案 1 :(得分:0)

为了结束问题并保持整洁,我想我将答案发布在这里。正如评论中指出的那样,我在这些帐单上收到Notice:,但由于变量if($interval == 1)被定义为{{1},因此条件$interval无法转换}对象。语法已更正为DateInterval,现在可以正常使用了。

我试图欣赏小东西可能造成的雪崩,但是有时候这对于a $$来说也是很痛苦的。