2017-04-23 51 views
2

我用這來創建日期之間的差值的字符串:PHP的DateTime取下DIFF零個值()

$startDate = DateTime::createFromFormat(self::$timeFormat, $startDate); 
$difference = $startDate->diff($endDate); 

$dateTimeElapsed = $difference->format('%y years %m months %a days %h hours %i minutes %S seconds'); 

return $dateTimeElapsed; 

這將輸出類似: 0年0個月0天0小時0分27秒

我如何代碼,所以我可以刪除任何零個值如0年,月等..

+0

有什麼內容'$ timeFormat'和'$ startD ate',你可能想要替換'$ dateTimeElapsed'中的所有0。 –

+0

格式爲23/04/2017 17:47:42 – Erdss4

+0

請看這裏。它可能有所幫助:http://stackoverflow.com/questions/1416697/converting-timestamp-to-time-ago-in-php-e-g-1-day-ago-2-days-ago – JazZ

回答

1

$dateTimeElapsed = $difference->format('%y|%m|%a|%h|%i|%S'); 

$outPuts = [ 
    "years", "months", "days", "hours", "minutes", "seconds" 
]; 

$explodedDateString = explode("|", $dateTimeElapsed); 

$dateTimeElapsed = array_combine($outPuts, $explodedDateString); 

$finalDateDiff = 0; 
foreach($dateTimeElapsed as $string => $value) 
{ 
    if($value > 0) 
    { 
     if($value == 1) 
     { 
     $string = substr($string, 0, -1); 
     } 
     $finalDateDiff = $value . " " . $string; 
     break; 
    } 
} 

return $finalDateDiff; 
整理出來

僅輸出大於零的最接近的值。使用explode將diff值放入數組中。將兩個數組組合在一起,以便字符串名稱「年,月」等符合其值,然後用戶使用foreach檢查值是否超過0.

返回0是不匹配或所有值都是0

編輯: 更新了代碼,以便當差異是1年,1個月,1天等...它刪除了結尾的's',以使其在語法上正確。