1

我有这个...

$firstDate = $row['date']; // 2013-09-11 18:35:24
$secondDate = date("Y-m-d H:i:s");  

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
$interval  = $datetime1->diff($datetime2);
if($interval->y !== 0) 
{
$elapsed   = $interval->format('%y years ago');
}
else
if($interval->m !== 0) 
{
$elapsed   = $interval->format('%m months ago');
}
else
if($interval->a <= 7 && a >=1) 
{
$elapsed   = $interval->format('%a days ago');
}
else
if($interval->h !== 0) 
{
$elapsed   = $interval->format('%h hours ago');
}
else
if($interval->i !== 0) 
{
$elapsed   = $interval->format('%i minutes ago');
}
else
if($interval->S !== 0) 
{
$elapsed   = $interval->format('%S seconds ago');
}

$elapsed   = str_replace(array('0 years ago', ' 0 months ago', ' 0 days ago',  ' 0 hours ago', ' 0 minutes ago'), '', $elapsed);
$elapsed   = str_replace(array('1 years ago', '1 months ago', '1 days ago',  '1 hours ago', '1 minutes ago'), array('1 year ago', '1 month ago', '1 day ago', '1 hour ago', '1 minute ago'), $elapsed);

该代码应该获取数据库中的日期并转换为人们可以理解的内容 - 5 天前,5 秒前。但是现在一天后,代码似乎跳过了一天。

我认为这与使用 %a 而不是 %d 有关,但我得到了一个错误。还有什么可能是错的?

谢谢!

4

1 回答 1

2

我相信这可能是解决您问题的更优雅的方法:

PHP 修改如何查找自日期时间以来经过的时间?

echo 'event happened '.humanTiming($row['date']).' ago';

function humanTiming ($time)
{

    $time = time() - $time; // to get the time since that moment

    $tokens = array (
        31536000 => 'year',
        2592000 => 'month',
        604800 => 'week',
        86400 => 'day',
        3600 => 'hour',
        60 => 'minute',
        1 => 'second'
    );

    foreach ($tokens as $unit => $text) {
        if ($time < $unit) continue;
        $numberOfUnits = floor($time / $unit);
        return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'');
    }

}
于 2013-09-19T22:52:47.280 回答