web-dev-qa-db-fra.com

Conversion des secondes en heure: minute: seconde

J'ai besoin de convertir les secondes en "heure: minute: seconde".

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

Comment puis-je atteindre cet objectif?

290
M.E

Vous pouvez utiliser la fonction gmdate() :

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

Une heure correspond à 3600 secondes, une minute à 60 secondes, 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 autant testé, il pourrait donc y avoir des erreurs avec le sol)

153
Aif

voici

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
69
nathan

Utilisez la fonction gmdate() seulement si les secondes sont inférieures à 86400 (1 jour) :

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

Voir: gmdate ()

Lancer la démonstration


Convertir les secondes au format par 'pied' sans limites* :

$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émonstration


Exemple d'utilisation de l'extension 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

Voir: DateTime :: __ construct () , DateTime :: modify () , clone , sprintf ()

Lancer la démonstration


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

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

Voir: SEC_TO_TIME

Lancer la démonstration


Exemple PostgreSQL:

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

Lancer la démonstration

60
Glavić

D'autres solutions utilisent gmdate, mais échouent dans les cas Edge où il vous reste plus de 86 400 secondes. Pour contourner cela, nous pouvons simplement calculer nous-mêmes le nombre d’heures, 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

27
RaDim
// 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
16
mughal
gmdate("H:i:s", no_of_seconds);

Ne donnera pas l'heure au format H:i:s si no_of_seconds est supérieur à 1 jour (secondes dans un jour).
Il néglige la valeur du jour et ne donne 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
Vikash Kumar

Voici une ligne qui gère les secondes négatives et plus d’un jour 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
Benjamin

écrire une fonction comme celle-ci 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;
}

appelez simplement la fonction comme ceci:

secondsToTime(100);

la sortie est

Array ( [h] => 0 [m] => 1 [s] => 40 )
5
vamsikrishnamannem

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
FooBar

Cette fonction peut être utile, vous pouvez 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
AMCoded

La fonction gmtdate () ne fonctionnait pas pour moi car je suivais le nombre d'heures travaillées sur un projet. Si le délai est supérieur à 24 heures, vous obtenez le montant restant après 24 heures. En d'autres termes, 37 heures deviennent 13 heures. (Tous comme mentionné ci-dessus par Glavic - merci pour vos exemples!) Celui-ci a bien fonctionné:

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
TotalPro

En Java, vous pouvez utiliser cette méthode.

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

Si vous n'aimez pas la réponse acceptée ou populaire une fois, essayez celui-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
Eranda

Essaye ça:

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

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

2
Kerry Jones

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 fonctions fastidieux et la construction pièce par pièce des cordes, et les fonctions volumineuses et encombrantes que les utilisateurs effectuent à cet effet.

Il produit le format "1h05m00s" et utilise des zéros non significatifs pour les minutes et les secondes, tant qu'un autre composant temporel différent de zéro les précède.

Et il ignore tous les composants principaux vides pour éviter de vous donner des informations inutiles telles que "0h00m01s" (au lieu de cela, elles apparaîtront sous la forme "1").

Exemple 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 placer plutôt 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'; }

La durée doit être égale ou supérieure à 0 dans les deux des codes ci-dessus. Les durées négatives ne sont pas prises en charge. Mais vous pouvez gérer les durées négatives en utilisant plutôt le code alternatif suivant:

$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
ThatBigGuy

Un moyen 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 le format Method de DateTime.

1
predkony

Eh bien, j'avais besoin de quelque chose qui réduirait les secondes en heures minutes, minutes, mais dépasserait 24 heures, et ne réduirait pas davantage en jours.

Voici une fonction simple qui fonctionne. Vous pouvez 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
Paul Ishak

Si vous avez besoin de le faire en javascript, vous pouvez le faire en une seule ligne de code, comme indiqué ici Convertissez des secondes en HH-MM-SS avec JavaScript . RemplacezSECONDESpar ce que vous voulez convertir.

var time = new Date(SECONDS * 1000).toISOString().substr(11, 8);
0
icynets
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
anu g prem
$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;

Pour le convertir en une fonction:

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
Brajinder Singh