[php] 초를 시간 : 분 : 초로 변환

초를 “Hour : Minute : Second”로 변환해야합니다.

예 : “685”를 “00:11:25″로 변환

어떻게하면 되나요?



답변

gmdate()기능을 사용할 수 있습니다 :

echo gmdate("H:i:s", 685);


답변

1 시간은 3600 초, 1 분은 60 초입니다.

<?php

$init = 685;
$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;

echo "$hours:$minutes:$seconds";

?>

어떤 생산 :

$ php file.php
0:11:25

(나는 이것을 많이 테스트하지 않았으므로 바닥에 오류가있을 수 있습니다)


답변

여기있어

function format_time($t,$f=':') // t = seconds, f = separator 
{
  return sprintf("%02d%s%02d%s%02d", floor($t/3600), $f, ($t/60)%60, $f, $t%60);
}

echo format_time(685); // 00:11:25


답변

gmdate() 초가 86400(1 일) 미만인 경우에만 기능을 사용하십시오 .

$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05

참조 : gmdate ()

데모 실행


‘발’에 의해 형식으로 초 변환 제한 없음 * :

$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05

참조 : floor () , sprintf () , 산술 연산자

데모 실행


DateTime확장 사용 예 :

$seconds = 8525;
$zero    = new DateTime("@0");
$offset  = new DateTime("@$seconds");
$diff    = $zero->diff($offset);
echo sprintf("%02d:%02d:%02d", $diff->days * 24 + $diff->h, $diff->i, $diff->s);
# 02:22:05

참조 : DateTime :: __ construct () , DateTime :: modify () , clone ,
sprintf ()

데모 실행


결과의-838:59:59838:59:59 MySQL 예제 범위는 다음과 같은 TIME 데이터 유형의 범위로 제한 됩니다 .

SELECT SEC_TO_TIME(8525);
# 02:22:05

SEC_TO_TIME 참조

데모 실행


PostgreSQL 예제 :

SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05

데모 실행


답변

다른 솔루션은을 사용 gmdate하지만 86400 초 이상인 경우에는 실패합니다. 이 문제를 해결하려면 시간을 직접 gmdate계산 한 다음 남은 초를 분 / 초로 계산하면됩니다.

echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);

입력 : 6030
출력 :1:40:30

입력 : 2000006030
출력 :555557:13:50


답변

// TEST
// 1 Day 6 Hours 50 Minutes 31 Seconds ~ 111031 seconds

$time = 111031; // time duration in seconds

$days = floor($time / (60 * 60 * 24));
$time -= $days * (60 * 60 * 24);

$hours = floor($time / (60 * 60));
$time -= $hours * (60 * 60);

$minutes = floor($time / 60);
$time -= $minutes * 60;

$seconds = floor($time);
$time -= $seconds;

echo "{$days}d {$hours}h {$minutes}m {$seconds}s"; // 1d 6h 50m 31s


답변

gmdate("H:i:s", no_of_seconds);

1 일 (하루 초)보다 큰 H:i:s경우 시간 형식을 제공하지 않습니다 no_of_seconds.
그것은 하루 가치를 무시하고 단지 줄 것이다Hour:Min:Seconds

예를 들면 다음과 같습니다.

gmdate("H:i:s", 89922); // returns 0:58:42 not (1 Day 0:58:42) or 24:58:42