Конвертировать секунды в Час: Минута: Секунда - PullRequest
304 голосов
/ 03 июля 2010

Мне нужно преобразовать секунды в «Час: Минута: Секунда».

Например: «685» преобразуется в «00:11:25»

Как мне этого добиться?

Ответы [ 25 ]

687 голосов
/ 03 июля 2010

Вы можете использовать функцию gmdate():

echo gmdate("H:i:s", 685);
160 голосов
/ 03 июля 2010

Один час - 3600 секунд, одна минута - 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

(я не слишком много тестировал, так что может бытьошибки с полом или около того)

70 голосов
/ 03 июля 2010

здесь вы идете

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
61 голосов
/ 01 января 2014

Используйте функцию 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 () , клон , Sprintf ()

Запустить демонстрацию


Пример MySQL диапазон результата ограничен диапазоном типа данных TIME, который составляет от -838:59:59 до 838:59:59:

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

См .: SEC_TO_TIME

Запуск демоверсии


Пример PostgreSQL:

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

Запустить демонстрацию

29 голосов
/ 08 января 2016

Другие решения используют gmdate, но не работают в тех случаях, когда у вас есть более 86400 секунд. Чтобы обойти это, мы можем сами посчитать количество часов, а затем gmdate вычислить оставшиеся секунды в минуты / секунды.

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

Ввод: 6030 Выход: 1:40:30

Ввод: 2000006030 Выход: 555557:13:50

16 голосов
/ 03 августа 2013
// 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
7 голосов
/ 10 сентября 2014
gmdate("H:i:s", no_of_seconds);

Не будет давать время в формате H:i:s, если no_of_seconds больше 1 дня (секунд в дне).
Оно будет пренебрегать значением дня и даст только Hour:Min:Seconds

Например:

gmdate("H:i:s", 89922); // returns 0:58:42 not (1 Day 0:58:42) or 24:58:42
6 голосов
/ 05 сентября 2014

Вот один вкладыш, который обрабатывает отрицательные секунды и секунд более чем на 1 день.

sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));

Например:

$seconds= -24*60*60 - 2*60*60 - 3*60 - 4; // minus 1 day 2 hours 3 minutes 4 seconds
echo sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));

выходы: -26: 03: 04

5 голосов
/ 03 сентября 2014

напишите такую ​​функцию, чтобы вернуть массив

function secondsToTime($seconds) {

  // extract hours
  $hours = floor($seconds / (60 * 60));

  // extract minutes
  $divisor_for_minutes = $seconds % (60 * 60);
  $minutes = floor($divisor_for_minutes / 60);

  // extract the remaining seconds
  $divisor_for_seconds = $divisor_for_minutes % 60;
  $seconds = ceil($divisor_for_seconds);

  // return the final array
  $obj = array(
      "h" => (int) $hours,
      "m" => (int) $minutes,
      "s" => (int) $seconds,
   );

  return $obj;
}

, затем просто вызовите функцию следующим образом:

secondsToTime(100);

вывод

Array ( [h] => 0 [m] => 1 [s] => 40 )
4 голосов
/ 18 марта 2014

См:

    /** 
     * Convert number of seconds into hours, minutes and seconds 
     * and return an array containing those values 
     * 
     * @param integer $inputSeconds Number of seconds to parse 
     * @return array 
     */ 

    function secondsToTime($inputSeconds) {

        $secondsInAMinute = 60;
        $secondsInAnHour  = 60 * $secondsInAMinute;
        $secondsInADay    = 24 * $secondsInAnHour;

        // extract days
        $days = floor($inputSeconds / $secondsInADay);

        // extract hours
        $hourSeconds = $inputSeconds % $secondsInADay;
        $hours = floor($hourSeconds / $secondsInAnHour);

        // extract minutes
        $minuteSeconds = $hourSeconds % $secondsInAnHour;
        $minutes = floor($minuteSeconds / $secondsInAMinute);

        // extract the remaining seconds
        $remainingSeconds = $minuteSeconds % $secondsInAMinute;
        $seconds = ceil($remainingSeconds);

        // return the final array
        $obj = array(
            'd' => (int) $days,
            'h' => (int) $hours,
            'm' => (int) $minutes,
            's' => (int) $seconds,
        );
        return $obj;
    }

От: Преобразование секунд в дни, часы, минуты и секунды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...