2017-08-18 19 views
2

我遇到了一個問題,我不知道如何處理。我現在將時間與未來的時間進行比較,以獲得時間差異,或者在這種情況下,剩下的時間和那部分工作很好。這是一個可以參考我的問題的代碼片段。PHP-隱藏未使用的時間戳記引用

$current = date('m/d/Y h:i:s a', time()); 
    $expired = date('m/d/Y h:i:s a', strtotime($expires)); 

    $dteStart = new DateTime($current); 
    $dteEnd = new DateTime($expired); 

    $dteDiff = $dteStart->diff($dteEnd); 

然後在我的HTML我插入以下...

echo $dteDiff->format("%ad %hh %im"); 

如前所述這一切的偉大工程,但有一個例外。它會產生未使用的時間參考。例如。

剩餘:0D 0H30米

正如你可以看到我不需要日或小時顯示,因爲它不被使用。我卡在哪裏是因爲它是所有顯示時間的單個變量我不知道如何隱藏不需要的時候顯示0的不使用的字符。

顯示如何隱藏顯示0如果全部三個顯示0顯示Expired字樣?這可以包裝在isset()中,即使它在一個變量中有多個值嗎?有什麼建議麼?

-Thanks

+0

只需使用UNIX值和/ 60即可獲取分鐘等。 – Andreas

+0

@Andreas對不起。我不確定我是否關注你。我可以顯示時間。當他們顯示0時,我需要隱藏時間參考。當然,我可以將它們一起移除,但是在需要顯示日期和小時的情況下,我需要一天一小時的實例。 – Texan78

+0

看到這個評論:http://php.net/manual/en/dateinterval.format.php#96768 –

回答

1

嘗試是這樣的:

$i = $dteDiff->format(" %ad %hh %im"); 
$i = str_replace(" 0d","",$i); 
if (strpos($i, 'd') == false) { 
    $i = str_replace(" 0h","",$i); 
    if (strpos($i, 'h') == false) { 
    $i = str_replace(" 0m","",$i); 
    } 
} 
$i = trim($i); 
if ($i == "") { 
    $i = "expired"; 
} 
echo $i; 
+0

它只是發生在我身上,這可能會刪除H/M,如果你得到像4D 0H 0M的確切時間,所以我更新它加入 – Nosajimiki

+0

這可能實際上是想要的。我認爲這個問題不太清楚。 –

+0

@Nosajimiki感謝您的更新。你發佈的原始答案就像一個魅力和我正在尋找的東西。我的確看過這個小小的警告,所以謝謝你考慮這個。 – Texan78

1

您還可以使用正則表達式替換任何零個值。

echo preg_replace('/\b0[dhm] ?/', '', $dteDiff->format("%ad %hh %im")) ?: 'Expired';