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

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

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

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

Ответы [ 25 ]

3 голосов
/ 06 февраля 2014

Функция gmtdate () не работала для меня, так как я отслеживал часы, потраченные на проект, и если это больше 24 часов, вы получаете сумму, оставшуюся после 24 часов вычитания. Другими словами, 37 часов становятся 13 часами. (все как указано выше Главичем - спасибо за ваши примеры!) Этот работал хорошо:

Convert seconds to format by 'foot' no limit :
$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05
3 голосов
/ 06 мая 2016

Эта функция может быть полезна, вы можете расширить ее:

function formatSeconds($seconds) {

if(!is_integer($seconds)) {
    return FALSE;
}

$fmt = "";

$days = floor($seconds / 86400);
if($days) {
    $fmt .= $days."D ";
    $seconds %= 86400;
}

$hours = floor($seconds / 3600);
if($hours) {
    $fmt .= str_pad($hours, 2, '0', STR_PAD_LEFT).":";
    $seconds %= 3600;
}

$mins = floor($seconds / 60 );
if($mins) {
    $fmt .= str_pad($mins, 2, '0', STR_PAD_LEFT).":";
    $seconds %= 60;
}

$fmt .= str_pad($seconds, 2, '0', STR_PAD_LEFT);

return $fmt;}
2 голосов
/ 03 июля 2010

Попробуйте:

date("H:i:s",-57600 + 685);

Взято из
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss

2 голосов
/ 01 февраля 2018

Если вам не нравится принятый или популярный ответ, попробуйте этот

function secondsToTime($seconds_time)
{
    if ($seconds_time < 24 * 60 * 60) {
        return gmdate('H:i:s', $seconds_time);
    } else {
        $hours = floor($seconds_time / 3600);
        $minutes = floor(($seconds_time - $hours * 3600) / 60);
        $seconds = floor($seconds_time - ($hours * 3600) - ($minutes * 60));
        return "$hours:$minutes:$seconds";
    }
}

secondsToTime(108620); // 30:10:20
1 голос
/ 10 февраля 2019

В Java вы можете использовать этот способ.

   private String getHmaa(long seconds) {
    String string;
    int hours = (int) seconds / 3600;
    int remainder = (int) seconds - hours * 3600;
    int mins = remainder / 60;
    //remainder = remainder - mins * 60;
    //int secs = remainder;

    if (hours < 12 && hours > 0) {
        if (mins < 10) {
            string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
        } else {
            string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? mins : "0") + " AM");
        }
    } else if (hours >= 12) {
        if (mins < 10) {
            string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? "0" + mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
        } else {
            string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
        }
    } else {
        if (mins < 10) {
            string = String.valueOf("0" + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
        } else {
            string = String.valueOf("0" + ":" + (mins > 0 ? mins : "0") + " AM");
        }
    }
    return string;
}
1 голос
/ 05 февраля 2017

Решение от: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b

Вот очень чистый и короткий метод!

Этот код максимально избегает утомительных вызовов функций и пошаговых строковыхздание, и большие и громоздкие функции, которые люди делают для этого.

Он производит формат "1h05m00s" и использует ведущие нули в течение минут и секунд, пока им предшествует другой ненулевой компонент времени.

И он пропускает все пустые ведущие компоненты, чтобы избежать предоставления вам бесполезной информации, такой как "0h00m01s" (вместо этого она будет отображаться как "1s").

Пример результатов: "1s", "1m00s"," 19m08s "," 1h00m00s "," 4h08m39s ".

$duration = 1; // values 0 and higher are supported!
$converted = [
    'hours' => floor( $duration / 3600 ),
    'minutes' => floor( ( $duration / 60 ) % 60 ),
    'seconds' => ( $duration % 60 )
];
$result = ltrim( sprintf( '%02dh%02dm%02ds', $converted['hours'], $converted['minutes'], $converted['seconds'] ), '0hm' );
if( $result == 's' ) { $result = '0s'; }

Если вы хотите сделать код еще короче (но менее читабельным), вы можете избежать массива $converted ивместо этого поместите значения непосредственно в вызов sprintf () следующим образом:

$duration = 1; // values 0 and higher are supported!
$result = ltrim( sprintf( '%02dh%02dm%02ds', floor( $duration / 3600 ), floor( ( $duration / 60 ) % 60 ), ( $duration % 60 ) ), '0hm' );
if( $result == 's' ) { $result = '0s'; }

Длительность должна быть 0 или выше в в обоих фрагментов кода выше.Отрицательные длительности не поддерживаются.Но вы можете обрабатывать отрицательные длительности, используя вместо этого следующий альтернативный код:

$duration = -493; // negative values are supported!
$wasNegative = FALSE;
if( $duration < 0 ) { $wasNegative = TRUE; $duration = abs( $duration ); }
$converted = [
    'hours' => floor( $duration / 3600 ),
    'minutes' => floor( ( $duration / 60 ) % 60 ),
    'seconds' => ( $duration % 60 )
];
$result = ltrim( sprintf( '%02dh%02dm%02ds', $converted['hours'], $converted['minutes'], $converted['seconds'] ), '0hm' );
if( $result == 's' ) { $result = '0s'; }
if( $wasNegative ) { $result = "-{$result}"; }
// $result is now "-8m13s"
1 голос
/ 24 июля 2014

Простой способ использовать DateTime для этого:

    $time = 60; //sec.
    $now = time();
    $rep = new DateTime('@'.$now);
    $diff = new DateTime('@'.($now+$time));
    $return = $diff->diff($rep)->format($format);

    //output:  01:04:65

Это простое решение, которое дает вам возможность использовать формат метода DateTime.

0 голосов
/ 03 апреля 2019

Если вам нужно сделать это в javascript, вы можете сделать это всего за одну строчку кода, как здесь ответили Конвертировать секунды в HH-MM-SS с JavaScript .Замените SECONDS на то, что вы хотите преобразовать.

var time = new Date(SECONDS * 1000).toISOString().substr(11, 8);
0 голосов
/ 14 декабря 2018
$given = 685;

 /*
 * In case $given == 86400, gmdate( "H" ) will convert it into '00' i.e. midnight.
 * We would need to take this into consideration, and so we will first
 * check the ratio of the seconds i.e. $given:$number_of_sec_in_a_day
 * and then after multiplying it by the number of hours in a day (24), we
 * will just use "floor" to get the number of hours as the rest would
 * be the minutes and seconds anyways.
 *
 * We can also have minutes and seconds combined in one variable,
 * e.g. $min_sec = gmdate( "i:s", $given );
 * But for versatility sake, I have taken them separately.
 */

$hours = ( $given > 86399 ) ? '0'.floor( ( $given / 86400 ) * 24 )-gmdate( "H", $given ) : gmdate("H", $given );

$min = gmdate( "i", $given );

$sec = gmdate( "s", $given );

echo $formatted_string = $hours.':'.$min.':'.$sec;

Чтобы преобразовать его в функцию:

function getHoursFormat( $given ){

 $hours = ( $given > 86399 ) ? '0'.floor( ( $given / 86400 ) * 24 )-gmdate( "H", $given ) : gmdate("H", $given );

 $min = gmdate( "i", $given );

 $sec = gmdate( "s", $given );

 $formatted_string = $hours.':'.$min.':'.$sec;

 return $formatted_string;

}
0 голосов
/ 04 июня 2018

А как же

print date('H:i:s', mktime(0, 0, 685, 0, 0));

без каких-либо расширений

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