Conversion secondes en Heure:Minute: Seconde

je dois convertir secondes en"Heure:Minute:Seconde".

par exemple: "685" converti en "00: 11: 25"

Comment puis-je y parvenir?

280
demandé sur Paolo Forgia 2010-07-03 21:56:43

22 réponses

vous pouvez utiliser la gmdate() fonction:

echo gmdate("H:i:s", 685);
632
répondu animuson 2010-07-03 18:03:34

une heure c'est 3600sec, une minute c'est 60sec alors pourquoi pas:

<?php

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

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

?>

qui produit:

$ php file.php
0:11:25

(Je n'ai pas testé autant, donc il pourrait y avoir des erreurs avec le plancher ou ainsi)

148
répondu Aif 2010-07-03 18:07:11

ici, vous allez

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
65
répondu nathan 2010-07-03 19:40:57

Utilisation de la fonction gmdate() si et seulement si les secondes sont moins 86400 (1 jour) :

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

voir: gmdate ()

lancer la Démo


Convertir secondes pour format par pied " pas de limite* :

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

voir: floor() , sprintf() , opérateurs arithmétiques

lancer la Démo


exemple d'utilisation de DateTime extension:

$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

Voir: DateTime::__construct() , DateTime::modifier() , clone , sprintf ()

lancer la Démo


MySQL exemple la plage du résultat est limitée à celle du type de données de temps, qui est de -838:59:59 à 838:59:59 :

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

voir: SEC_TO_TIME

lancer la Démo


PostgreSQL exemple:

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

lancer la Démo

59
répondu Glavić 2017-06-13 18:38:46

autres solutions utilisez gmdate , mais échouez dans les cas de bord où vous avez plus de 86400 secondes. Pour contourner cela, nous pouvons simplement calculer le nombre d'heures nous-mêmes, puis laisser gmdate calculer les secondes restantes en minutes/secondes.

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

Entrée: 6030 Sortie: 1:40:30

Entrée: 2000006030 Sortie: 555557:13:50

23
répondu RaDim 2018-04-16 10:44:31
// 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
15
répondu mughal 2013-08-03 16:55:08
gmdate("H:i:s", no_of_seconds);

ne donnera pas de temps dans le format H:i:s si no_of_seconds est supérieur à 1 jour (secondes dans une journée).

Il négligera la valeur de jour et ne donnera que Hour:Min:Seconds

par exemple:

gmdate("H:i:s", 89922); // returns 0:58:42 not (1 Day 0:58:42) or 24:58:42
7
répondu Vikash Kumar 2015-07-15 18:24:35

Voici une doublure qui supporte les secondes négatives et plus d'une journée de secondes.

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

Par Exemple:

$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));

sorties: -26: 03 :04

6
répondu Benjamin 2014-09-05 15:42:56

écrire la fonction comme ceci pour retourner un tableau

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;
}

alors appelez simplement la fonction comme ceci:

secondsToTime(100);

sortie est

Array ( [h] => 0 [m] => 1 [s] => 40 )
5
répondu vamsikrishnamannem 2015-04-09 16:32:11

voir:

    /** 
     * 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;
    }

de: Convertissez les secondes en jours, Heures, minutes et secondes

4
répondu FooBar 2017-05-23 12:34:45

la fonction gmtdate() ne fonctionnait pas pour moi car je suivais les heures travaillées sur un projet et si c'est plus de 24 heures, vous obtenez la quantité restante après 24 heures est soustraite. En d'autres termes, 37 heures deviennent 13 heures. (tous comme indiqué ci-dessus par Glavic - merci pour vos exemples!) Celui-ci fonctionnait bien:

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
répondu TotalPro 2014-02-05 21:43:05

cette fonction mon être utile, vous pourriez l'étendre:

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;}
3
répondu AMCoded 2016-05-06 16:10:21

essayez ceci:

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

from

http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss

2
répondu Kerry Jones 2010-07-03 17:58:48

si vous n'aimez pas réponse acceptée ou populaire une fois, puis essayer celle-ci

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
2
répondu Eranda 2018-02-01 07:06:30

une façon simple d'utiliser DateTime pour cela est:

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

    //output:  01:04:65

c'est une solution simple qui vous donne la possibilité d'utiliser la méthode de format de DateTime.

1
répondu predkony 2014-07-24 13:57:12

Solution de: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b

Voici une méthode très propre et courte!

ce code évite autant que possible les appels de fonction fastidieux et la construction pièce par pièce de corde, et les fonctions grandes et volumineuses que les gens font pour cela.

il produit le format "1h05m00s" et utilise des zéros de tête pendant des minutes et des secondes, aussi longtemps que une autre composante temporelle non nulle les précède.

et il saute tous les composants principaux vides pour éviter de vous donner des informations inutiles comme" 0h00m01s "(à la place qui apparaîtra comme"1s").

exemples de résultats:" 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'; }

si vous voulez rendre le code encore plus court (mais moins lisible), vous pouvez éviter le tableau $converted et à la place mettre les valeurs directement dans l'appel sprintf (), comme suit:

$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'; }

Durée doit être égal à 0 ou supérieur à les deux des morceaux de code ci-dessus. Les durées négatives ne sont pas supportées. Mais vous pouvez gérer les durées négatives en utilisant le code alternatif suivant à la place:

$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
répondu ThatBigGuy 2017-02-05 18:21:20
function timeToSecond($time){
    $time_parts=explode(":",$time);
    $seconds= ($time_parts[0]*86400) + ($time_parts[1]*3600) + ($time_parts[2]*60) + $time_parts[3] ; 
    return $seconds;
}

function secondToTime($time){
    $seconds  = $time % 60;
    $seconds<10 ? "0".$seconds : $seconds;
    if($seconds<10) {
        $seconds="0".$seconds;
    }
    $time     = ($time - $seconds) / 60;
    $minutes  = $time % 60;
    if($minutes<10) {
        $minutes="0".$minutes;
    }
    $time     = ($time - $minutes) / 60;
    $hours    = $time % 24;
    if($hours<10) {
        $hours="0".$hours;
    }
    $days     = ($time - $hours) / 24;
    if($days<10) {
        $days="0".$days;
    }

    $time_arr = array($days,$hours,$minutes,$seconds);
    return implode(":",$time_arr);
}
0
répondu anu g prem 2016-10-17 11:01:14

il me fallait quelque chose qui réduise les secondes en heures, les minutes et les secondes, mais qui dépasse les 24 heures, et qui ne réduit pas davantage en jours.

Voici une fonction simple qui fonctionne. Tu peux probablement l'améliorer... Mais le voici:

function formatSeconds($seconds)
{
    $hours = 0;$minutes = 0;
    while($seconds >= 60){$seconds -= 60;$minutes++;}
    while($minutes >= 60){$minutes -=60;$hours++;}
    $hours = str_pad($hours, 2, '0', STR_PAD_LEFT);
    $minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
    $seconds = str_pad($seconds, 2, '0', STR_PAD_LEFT);
    return $hours.":".$minutes.":".$seconds;
}
0
répondu Paul Ishak 2017-10-02 14:03:36

juste au cas où quelqu'un d'autre est à la recherche d'une fonction simple pour retourner ce joli format (je sais que ce n'est pas le format que L'OP a demandé), c'est ce que je viens de trouver. Merci à @mughal pour le code sur lequel cela était basé.

function format_timer_result($time_in_seconds){
    $time_in_seconds = ceil($time_in_seconds);

    // Check for 0
    if ($time_in_seconds == 0){
        return 'Less than a second';
    }

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

    // Hours
    $hours = floor($time_in_seconds / (60 * 60));
    $time_in_seconds -= $hours * (60 * 60);

    // Minutes
    $minutes = floor($time_in_seconds / 60);
    $time_in_seconds -= $minutes * 60;

    // Seconds
    $seconds = floor($time_in_seconds);

    // Format for return
    $return = '';
    if ($days > 0){
        $return .= $days . ' day' . ($days == 1 ? '' : 's'). ' ';
    }
    if ($hours > 0){
        $return .= $hours . ' hour' . ($hours == 1 ? '' : 's') . ' ';
    }
    if ($minutes > 0){
        $return .= $minutes . ' minute' . ($minutes == 1 ? '' : 's') . ' ';
    }
    if ($seconds > 0){
        $return .= $seconds . ' second' . ($seconds == 1 ? '' : 's') . ' ';
    }
    $return = trim($return);

    return $return;
}
-1
répondu Luke Cousins 2013-12-23 15:31:37

toute personne dont la recherche de ce à l'avenir, cela donne le format que l'affiche initiale a demandé.

$init = 685;
$hours = floor($init / 3600);
$hrlength=strlen($hours);
if ($hrlength==1) {$hrs="0".$hours;}
else {$hrs=$hours;} 

$minutes = floor(($init / 60) % 60);
$minlength=strlen($minutes);
if ($minlength==1) {$mins="0".$minutes;}
else {$mins=$minutes;} 

$seconds = $init % 60;
$seclength=strlen($seconds);
if ($seclength==1) {$secs="0".$seconds;}
else {$secs=$seconds;} 

echo "$hrs:$mins:$secs";
-1
répondu Gordon 2013-12-27 16:11:50

à propos

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

sans aucune extension

-1
répondu Zgr3doo 2018-06-04 14:33:39
<?php
$time=3*3600 + 30*60;


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

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

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

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

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

$second=floor($time);
$time-=$second;
if($year>0){
    echo $year." year, ";
}
if($month>0){
    echo $month." month, ";
}
if($day>0){
    echo $day." day, ";
}
if($hour>0){
    echo $hour." hour, ";
}
if($minute>0){
    echo $minute." minute, ";
}
if($second>0){
    echo $second." second, ";
}
-3
répondu Ibrahim Akbar 2016-08-13 20:51:07