115 votes

Convertir des secondes en jours, heures, minutes et secondes

Je voudrais convertir une variable $uptime qui est en secondes, en jours, heures, minutes et secondes.

Exemple:

$uptime = 1640467;

Résultat devrait être:

18 days 23 hours 41 minutes

253voto

Glavić Points 13021

Ceci peut être réalisé avec DateTime classe

Utilisation:

echo secondsToTime(1640467);
# 18 days, 23 hours, 41 minutes and 7 seconds

Fonction:

function secondsToTime($seconds) {
    $dtF = new DateTime("@0");
    $dtT = new DateTime("@$seconds");
    return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds');
}

démo

48voto

Julian Moreno Points 471

C'est la fonction remanié de manière à inclure jours. J'ai aussi changé les noms de variables pour rendre le code plus facile à comprendre...

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

Source: CodeAid() - http://codeaid.net/php/convert-seconds-to-hours-minutes-and-seconds-(php)

29voto

snippetsofcode Points 374

Ici, c'est un simple 8 lignes de fonction PHP qui convertit un nombre de secondes dans un lisible par l'homme de la chaîne, y compris le nombre de mois pour de grandes quantités de secondes:

Fonction PHP seconds2human()

15voto

Caner SAYGIN Points 26
gmdate("d H:i:s",1640467);

Le résultat sera de 19 à 23:41:07. Quand c'est juste une seconde de plus que la normale de la journée, c'est l'augmentation de la valeur du jour pour 1 jour. C'est pourquoi il 19. Vous pouvez faire exploser le résultat de vos besoins et de résoudre ce problème.

3voto

Artur Points 3152

Même si elle est assez vieille question -, on peut trouver ces très utiles (pas écrit pour être rapide):

function d_h_m_s__string1($seconds)
{
    $ret = '';
    $divs = array(86400, 3600, 60, 1);

    for ($d = 0; $d < 4; $d++)
    {
        $q = (int)($seconds / $divs[$d]);
        $r = $seconds % $divs[$d];
        $ret .= sprintf("%d%s", $q, substr('dhms', $d, 1));
        $seconds = $r;
    }

    return $ret;
}

function d_h_m_s__string2($seconds)
{
    if ($seconds == 0) return '0s';

    $can_print = false; // to skip 0d, 0d0m ....
    $ret = '';
    $divs = array(86400, 3600, 60, 1);

    for ($d = 0; $d < 4; $d++)
    {
        $q = (int)($seconds / $divs[$d]);
        $r = $seconds % $divs[$d];
        if ($q != 0) $can_print = true;
        if ($can_print) $ret .= sprintf("%d%s", $q, substr('dhms', $d, 1));
        $seconds = $r;
    }

    return $ret;
}

function d_h_m_s__array($seconds)
{
    $ret = array();

    $divs = array(86400, 3600, 60, 1);

    for ($d = 0; $d < 4; $d++)
    {
        $q = $seconds / $divs[$d];
        $r = $seconds % $divs[$d];
        $ret[substr('dhms', $d, 1)] = $q;

        $seconds = $r;
    }

    return $ret;
}

echo d_h_m_s__string1(0*86400+21*3600+57*60+13) . "\n";
echo d_h_m_s__string2(0*86400+21*3600+57*60+13) . "\n";

$ret = d_h_m_s__array(9*86400+21*3600+57*60+13);
printf("%dd%dh%dm%ds\n", $ret['d'], $ret['h'], $ret['m'], $ret['s']);

résultat:

0d21h57m13s
21h57m13s
9d21h57m13s

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X