PHP功能“ ...天前”在“循环中”不起作用

时间:2019-06-01 17:41:01

标签: php

我想在首页上为我的每篇文章添加发布时间的描述。因此,有一些内容是在不同的时间发布的,我想通过添加对发布日期的描述使其更加清晰。

但是我发现了一个复杂的问题。在下面的代码示例中,它会产生错误的时间。我尝试了几次,但是失败了。我是否仍可以使用此代码解决此问题,或者还有另一个更完美的代码。

PHP代码:

$sql = $DBcon->query("SELECT content, post_date FROM article");
$row = $sql->fetch_array();
$post_date = $row['post_date']; // 2019-06-01 16:29:07

function time_elapsed_string($datetime, $full = false) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
        'y' => 'year',
        'm' => 'month',
        'w' => 'week',
        'd' => 'day',
        'h' => 'hour',
        'i' => 'minute',
        's' => 'second',
    );
    foreach ($string as $k => &$v) {
        if ($diff->$k) {
            $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
        } else {
            unset($string[$k]);
        }
    }

    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(', ', $string) . ' ago' : 'just now';
}

do {
// .......

echo $row['content'];
echo time_elapsed_string( $post_date );

// .......
} while ($row = $sql->fetch_array());

以上代码对所有内容产生相同的时间。即使我的内容是在不同的时间制作的。显然这是错误的。那么如何解决呢?

2 个答案:

答案 0 :(得分:0)

移动此行:

unique_ptr

$post_date = $row['post_date']; // 2019-06-01 16:29:07 循环内,或如下所示,完全删除变量。

do ... while

答案 1 :(得分:-1)

尝试以下方式:

   while($row = $result->fetch_assoc()) {
        echo $row['content'];
    }

用于循环::您需要在while循环中使用条件。 这是有关while循环的5个示例。签出https://www.w3schools.com/php/php_looping.asp