2012-09-07 91 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