2010-12-11 4 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을 수정하기 위해'str_pad'를 추가했습니다. 비트는 내 'while'보다 더 빠릅니다. :) –

+0

고마워요. 당신은 제가 포맷팅 할 때보 다 조금 더 정확했습니다. 쉬운 경로를 선택했지만 OP와 같이 HH : MM : SS 형식을 만드는 데 시간이 걸렸습니다. – AgentConundrum

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

BTW : 23414 초 = '6:30:14', '6 일, 4:12:36'이 아닙니다. –

+0

끝에있는 에코에 약간의 문제가 있습니다. 시, 분, 초를 10 이하로 지정할 때 선행 0을 추가해야합니다. 그렇지 않으면 "12 : 4 : 32"와 같은 출력이 나옵니다. – AgentConundrum

+0

@AgentConundrum, true입니다. 나눗셈과 모듈러스에 대해 –

관련 문제