我有这个,但它只能显示以秒、分钟或小时为单位的时差。
$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;