2012-09-07 62 views
2

我检查过,这不是重复的。我有这个功能修改日期时间功能以显示正确的间隔

$since = date('Y-m-d H:i:s', strtotime($since));   
     $date = new DateTime($since); 
     $interval = $date->diff(new DateTime('now')); 
     return $interval->format('%y years, %m months, %d days, %h hours and %i minutos ago %s seconds ago'); 

但当然,我得到这样一个日期“5年内,2个月,5天......”

我想要得到的是间隔的只是其中的一部分。这意味着,我不想得到“0年,0个月,0天”,但可以说“3分钟”或“5天”等等......

我是新的DateTime,但没有找到函数在php.net网站上做到了。有没有人或我必须自己创建一个?谢谢!

+0

不知道这样的功能的。你必须自己写。 –

+0

为什么你使用date()和strtotime()?只需添加$作为DateTime($ since)参数... –

回答

0

这是我想出了:

<?php 

/** 
* Return formatted interval where only the largest unit gets displayes. 
* @param DateInterval $interval 
* 
* @return string 
*/ 
function format_properly(DateInterval $interval) { 
    if ($interval->y !== 0) { 
     return $interval->format("%y years"); 
    } 
    if ($interval->m !== 0) { 
     return $interval->format("%m months"); 
    } 
    if ($interval->d !== 0) { 
     return $interval->format("%d days"); 
    } 
    if ($interval->h !== 0) { 
     return $interval->format("%h hours"); 
    } 
    if ($interval->i !== 0) { 
     return $interval->format("%i minutes"); 
    } 
    if ($interval->s !== 0) { 
     return $interval->format("%s seconds"); 
    } 
    return "0 seconds"; 
} 

$date = new DateTime("now"); 
$date->sub(new DateInterval("PT2H5M")); //Now - 2 hours and 5 minutes 

$now = new DateTime("now"); 

$interval = $date->diff($now); 

echo format_properly($interval); 
var_dump($interval); 
0

DateTime::diff返回DateInterval实例,其字段是其他人中:

public integer $y ; 
public integer $m ; 
public integer $d ; 
public integer $h ; 
public integer $i ; 
public integer $s ; 

只需选择您所需要的,例如的那些$interval -> h小时。这里

编辑你有一个包装:

function formatInterval(DateInterval $interval) 
{ 

    static $values = array(
     'y' => 'years', 
     'm' => 'months', 
     'd' => 'days', 
     'h' => 'hours', 
     'i' => 'minutes', 
     's' => 'seconds',         
    ); 

    $formatString = ""; 

    foreach($values as $key => $label) 
    { 

     if(($value = $interval -> {$key}) === 0) 
      continue; 

     $formatString .= sprintf('%s %s ', $value, $label); 

    } 

    return $formatString; 

} 

$date = new DateTime; 
$interval = $date -> diff(new DateTime('2012-09-7')); 

echo formatInterval($interval); 

打印出:

20 hours 47 minutes 13 seconds 
+0

重点是根据间隔动态选择。 –

+0

只需在值的周围写一个简单的包装 - 我将为此编辑。 – moonwave99