-1

我刚刚问了一个问题并得到了快速而有用的回复,但经过几次编辑后,这段代码似乎无法正常运行。

$firstDate = '2013-09-17 21:20:24';

echo $firstDate;
echo '<br>';

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
$interval  = $datetime1->diff($datetime2);
if ($interval->a <= 7)
{
    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 !== 0) 
    {
    $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);
    echo $elapsed;
}
else 
{
    echo $firstDate;
}

代码应该给出 X 天前或 X 秒前的格式

但它在几天后停止工作,所以我没有几分钟或几秒钟。为什么这不起作用?

4

2 回答 2

2

我建议您允许在您的开发服务器的 php.ini 文件中查看错误和通知。 如何在我的开发服务器上启用通知

运行您提供的代码时,我得到一个Notice: Undefined variable: secondDateonline 11Undefined property: DateInterval::$aon line 23

您似乎在要求 PHP 使用不完整的数据来格式化数字。

于 2013-09-18T01:43:00.233 回答
0

它不起作用,因为您使用$interval->a了几天和$interval->S几秒钟。正确的是$interval->days(for if ($interval->days <= 7))、$interval->d(for if($interval->d !== 0)) 和$interval->s(for if($interval->s !== 0))。

有关正确参数,请参阅DateInterval


您可以使用以下代码:

使用示例:

echo time_elapsed_string('2013-09-01 00:22:35');
echo time_elapsed_string('2013-09-01 00:22:35', true);

输出 :

17 days ago
17 days, 1 hour, 40 minutes, 12 seconds ago

链接到函数。

于 2013-09-18T01:49:05.140 回答