395 votes

Convertir les 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 y parvenir ?

4 votes

La question est ambiguë : vous souhaitez convertir votre seconds à un date/time ou à une quantité de Heures:Minute:Secondes ?

855voto

animuson Points 23184

Vous pouvez utiliser le gmdate() fonction :

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

197 votes

Il faut cependant s'assurer que le nombre de secondes est inférieur à 86 400.

0 votes

Une petite astuce que je viens d'utiliser est la suivante : $recording_length = explode(" :", gmdate("H:i:s", $recording_length)) - Crée un tableau où l'élément 0 est l'heure, 1=minute & 2=sec.

1 votes

Quelqu'un pourrait-il m'expliquer pourquoi cela fonctionne avec gmdate() et pourquoi le nombre de secondes doit être inférieur à un jour ?

203voto

Aif Points 4603

Une heure c'est 3600sec, une minute c'est 60sec donc 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 ne l'ai pas beaucoup testé, il peut donc y avoir des erreurs avec le sol ou autre).

0 votes

Mais il veut deux zéros... "00:11:25" pas "0:11:25"

65 votes

printf("%02d:%02d:%02d", $hours, $minutes, $seconds);

11 votes

Bonne réponse, mais assurez-vous de soustraire $hours*3600 et $minutes*60 de $init entre chaque opération, sinon vous finirez par compter deux fois les minutes et les secondes.

93voto

nathan Points 3017

Voilà

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

1 votes

Ne fonctionne pas pour les valeurs négatives. Si vous avez un intervalle de secondes négatif, utilisez ceci : return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }

74voto

Glavić Points 13021

Fonction d'utilisation gmdate() seulement si les secondes sont inférieures à 86400 (1 jour) :

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

Voir : gmdate()

Exécuter la démo


Convertir les secondes au format 'pied'. aucune 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

Exécuter 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::modify() , clone , sprintf()

Exécuter la démo


Exemple MySQL L'étendue du résultat est limitée à celle du type de données TIME, qui est comprise entre 0 et 100 %. -838:59:59 à 838:59:59 :

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

Voir : SEC_TO_TIME

Exécuter la démo


Exemple de PostgreSQL :

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

Exécuter la démo

17voto

mughal Points 61
// 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

0 votes

$hms=gmdate("H:i:s",12720) ; il ne suffit pas d'obtenir Day-Hour-Min-Sec.

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