2010-12-11 84 views
0

我試圖格式化日期說有多少時間是從左邊(以可讀格式)多少秒左起:php - 剩下幾秒鐘?

<?php 
    $seconds = 23414; 
    $date = new DateTime(); 
    $date->setTime(0, 0, $seconds); 
    echo $date->format('z G:i:s'); 
?> 

這個例子可能輸出類似:344 11:46:45這是不是我我喜歡。它應該說類似於6 days, 4:12:36。我只是在這裏看不到任何東西:http://www.php.net/manual/en/function.date.php這將幫助我正確格式化。想法?

回答

2

不知建於什麼,但它很容易寫:

function formatSeconds($secondsLeft) { 

    $minuteInSeconds = 60; 
    $hourInSeconds = $minuteInSeconds * 60; 
    $dayInSeconds = $hourInSeconds * 24; 

    $days = floor($secondsLeft/$dayInSeconds); 
    $secondsLeft = $secondsLeft % $dayInSeconds; 

    $hours = floor($secondsLeft/$hourInSeconds); 
    $secondsLeft = $secondsLeft % $hourInSeconds; 

    $minutes= floor($secondsLeft/$minuteInSeconds); 

    $seconds = $secondsLeft % $minuteInSeconds; 

    $timeComponents = array(); 

    if ($days > 0) { 
    $timeComponents[] = $days . " day" . ($days > 1 ? "s" : ""); 
    } 

    if ($hours > 0) { 
    $timeComponents[] = $hours . " hour" . ($hours > 1 ? "s" : ""); 
    } 

    if ($minutes > 0) { 
    $timeComponents[] = $minutes . " minute" . ($minutes > 1 ? "s" : ""); 
    } 

    if ($seconds > 0) { 
    $timeComponents[] = $seconds . " second" . ($seconds > 1 ? "s" : ""); 
    } 

    if (count($timeComponents) > 0) { 
    $formattedTimeRemaining = implode(", ", $timeComponents); 
    $formattedTimeRemaining = trim($formattedTimeRemaining); 
    } else { 
    $formattedTimeRemaining = "No time remaining."; 
    } 

    return $formattedTimeRemaining; 

} 

我還沒有徹底的測試,但我並運行測試工作的罰款。在使用它之前,您可能需要自己測試一下。

+0

+1的分割和模數。比我的'while'快一點:) :) – 2010-12-11 05:49:19

+0

謝謝。你比格式化更精確一點。我選擇了簡單的路線,但您花時間創建了像OP提到的HH:MM:SS格式。 – AgentConundrum 2010-12-11 05:58:54

0

喜歡的東西:

$SECONDS_IN_MINUTE = 60; 
$SECONDS_IN_HOUR = $SECONDS_IN_MINUTE * 60; 
$SECONDS_IN_DAY = $SECONDS_IN_HOUR * 24; 

$days = 0; 
$hours = 0; 
$minutes = 0; 
$seconds = 23414; 

while ($seconds > $SECONDS_IN_DAY) { 
    $days++; 
    $seconds -= $SECONDS_IN_DAY; 
} 
while ($seconds > $SECONDS_IN_HOUR) { 
    $hours++; 
    $seconds -= $SECONDS_IN_HOUR; 
} 
while ($seconds > $SECONDS_IN_MINUTE) { 
    $minutes++; 
    $seconds -= $SECONDS_IN_MINUTE; 
} 

echo ($days > 0 ? $days . ' day' . ($days > 1 ? 's' : '') . ', ' : '') . 
    $hours . ':' . str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':' . str_pad($seconds, 2, '0', STR_PAD_LEFT); 

骯髒的,但應該工作。

+0

順便說一句:23414秒='6:30:14',而不是'6天,4:12:36' – 2010-12-11 05:45:40

+0

最後回聲有輕微問題。當您格式化小時,分鐘和秒數在10以下時,您需要添加前導零,否則您將獲得像「12:4:32」的輸出。 – AgentConundrum 2010-12-11 05:57:49

+0

@AgentConundrum,true。我加了'str_pad'來糾正 – 2010-12-11 06:11:37