PHP代码似乎不起作用

时间:2013-09-18 01:34:28

标签: php date

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

$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秒前的格式

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

2 个答案:

答案 0 :(得分:2)

我建议您允许在php.ini文件中查看开发服务器的错误和通知。 How to enable notices on my development server

运行您提供的代码时,我Notice: Undefined variable: secondDate上的line 11Undefined property: DateInterval::$a上的line 23。{/ p>

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

答案 1 :(得分:0)

它无法正常工作,因为您使用$interval->a天,$interval->S秒。正确的是$interval->days(适用于if ($interval->days <= 7)),$interval->d(适用于if($interval->d !== 0))和$interval->s(适用于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

<强> Link to the function.