如何从两个日期时间数据库字段中回显时间差,以秒、分钟和小时为单位,而不仅仅是其中之一


How do I echo time difference from 2 datetime database fields, in seconds minutes and hours, not just one of those things?

我有这个,但它只能显示以秒、分钟或小时为单位的时差。

$diff = strtotime('2015-02-10 17:03:44') - strtotime(''.$row['start_time'].'');
$mins = $diff / 60;
$hrs = $mins / 60;
echo $diff." seconds<br />";
echo $mins." minutes<br />";
echo $hrs." hours<br />";

第一个日期时间(end_time)是静态的,但稍后将是动态的。这样做只是为了测试。本例中的start_time为:2015-02-10 17:03:14

上述结果是:

30 seconds
0.5 minutes
0.0083333333333333 hours

我不想显示以秒为单位的总差异、以分钟为单位的总数差异和以小时为单位的总额差异,我想显示以小时、分钟和秒为单位,如下所示:

0 hours 0 minutes 30 seconds

如果小时小于1,则应四舍五入为0,分钟也应如此。如果差异有几分钟和几秒钟,那么一个例子就是:

0 hours 5 minutes 45 seconds

如果差异全部为3,则这将是一个示例结果:

1 hour 17 minutes 10 seconds

我该怎么做?

以下是解决方案:

$diff = "";
    if( @$params["from_date"] && @$params["to_date"] )
    {
        $days = intVal( DateTime::createFromFormat( "d-m-Y H:i:s", $params ['from_date']." 00:00:00" )->diff( DateTime::createFromFormat("d-m-Y H:i:s", $params['to_date']." 00:00:00" ) )->d );
        $months = intVal( DateTime::createFromFormat( "d-m-Y H:i:s", $params['from_date']." 00:00:00" )->diff( DateTime::createFromFormat("d-m-Y H:i:s", $params['to_date']." 00:00:00" ) )->m );
        $years = intVal( DateTime::createFromFormat( "d-m-Y H:i:s", $params['from_date']." 00:00:00" )->diff( DateTime::createFromFormat("d-m-Y H:i:s", $params['to_date']." 00:00:00" ) )->y );
        // for years, months and days
        if($months == 0 && $years == 0 && $days >= 1) 
            $diff = $days. ' day(s)';
        elseif($months == 0 && $years >= 1 && $days == 0)  
            $diff = $years.' year(s)';
        elseif($months == 0 && $years >= 1 && $days >= 1)
            $diff = $years.' year(s) '. $days.' day(s)';
        elseif($months >= 1 && $years == 0 && $days == 0)
            $diff = $months.' month(s)';
        elseif($months >= 1 && $years == 0 && $days >= 1)
            $diff = $months.' month(s) '.$days.' day(s)';
        elseif($months >= 1 && $years >= 1 && $days == 0)
            $diff = $years. ' year(s) '.$months.' month(s) ';
        elseif($months >= 1 && $years >= 1 && $days >= 1)
            $diff = $years.' year(s) '.$months.' month(s) '.$days.' day(s)';
        else
        {   
            $diff = $years.' year(s) '.$months.' month(s) ';
        }
    }
    echo $diff;