2017-08-18 5 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 0Hの30メートル

あなたは、私はそれが使用されていないため、表示するために一日か時間は必要ありません見ることができるように。私が立ち往生しているのは、時間を表示するための1つの変数なので、0を表示しているときに不要な未使用の文字を隠す方法がわかりません。

0を表示するものを非表示にするにはどうすればいいですか3つとも0と表示されている場合は、期限切れの単語が表示されますか? 1つの変数に複数の値があっても、これをisset()でラップすることはできますか?助言がありますか?

-Thanksは

+0

UNIX値と/ 60を使用して分などを取得してください。 – Andreas

+0

@アンドレアスごめんなさい。私はあなたに従っているかどうかはわかりません。私は時間を表示することができます。 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

4d 0h 0mのような正確な時刻を取得するとH/Mが削除される可能性がありますそれを忠実に更新しました – Nosajimiki

+0

それは実際に欲しかったかもしれません。私はそれが質問からかなり明らかではないと思う。 –

+0

@Nosajimiki更新していただきありがとうございます。あなたが投稿した元の回答は、魅力と私が探していたもののように機能しました。私はそのことを考えてくれてありがとうございました。 – Texan78

1

あなたはまた、任意のゼロ値を置き換えるために、正規表現を使用することができます。

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