Débutant : fonction pour transformer un temps en secondes en jour heure minute seconde

Soyez le premier à donner votre avis sur cette source.

Vue 10 119 fois - Téléchargée 318 fois

Description

Voila ce script (non-dynamique) en PHP est on ne peut plus simple, il permet de passer d'un temps exprimé en secondes (mettons 125000), donc très logique un temps enregistré dans une BDD sous la forme int (entier), en un horaire affichable sur un page.

Son fonctionnement =>
1ere étape :
Il retranche le nombre de jours au compteur de secondes et crée une variable $jour.
Il retranche le nombre d'heures au compteur de secondes et crée une variable $heure.
Il retranche le nombre de minutes au compteur de secondes et crée une variable $minute.
Il crée une variable $secondes avec ce qu'il reste.

2eme étape :
Il rajoute les 0 manquants aux valeurs en dessous de 10 pour les rendre affichables.

3eme étape :
Il sélectionne l'affichage des données pour éviter d'en afficher trop, du genre temps = 0j 00:00:10, mais pour afficher seulement 00:10 (ou personnalisable, bien sur).

et il retourne la valeur dans une variable de type chaîne de caractère.

Source / Exemple :


<!-- fonction de conversion secondes => Jour Heure Minute Seconde - Par MonkeyIsBack le 13 novembre 2009 -->
<?php
// Fonction convertir secondes en heures
function Convert_Sec_JHms($Seconde)
{
	// Transformation Secondes en Jour Heure minute seconde
	while ($Seconde >= 86400)
	{$Jour = $Jour + 1; $Seconde = $Seconde - 86400;}
	while ($Seconde >= 3600)
	{$Heure = $Heure + 1; $Seconde = $Seconde - 3600;}
	while ($Seconde >= 60)
	{$Minute = $Minute + 1; $Seconde = $Seconde - 60;}
	
	// Ajout des zéros au cas où l'affichage soit en dessous de 10
	if ($Heure < 10)
	{$Heure = '0'.$Heure;}
	if ($Minute < 10 AND $Minute > 0)
	{$Minute = '0'.$Minute;}
	if ($Minute == 0)
	{$Minute = '00';}
	if ($Seconde < 10)
	{$Seconde = '0'.$Seconde;}
	
	// Retourne une variable la plus petite possible
	if ($Jour > 0)
	{$Convert = $Jour.'j '.$Heure.':'.$Minute.':'.$Seconde; return $Convert;}
	elseif ($Heure > 0)
	{$Convert = $Heure.':'.$Minute.':'.$Seconde; return $Convert;}
	elseif ($Minute > 0)
	{$Convert = $Minute.':'.$Seconde; return $Convert;}
	else
	{$Convert = '00:'.$Seconde; return $Convert;}
}?>

Conclusion :


Conclusion :

Pour appeller la fonction, il suffit de faire :

<?php $TempsJHms = function Convert_Sec_JHms(12500);
echo $TempsJHms; // affiche 20:00 ?>

ou, plus simple mais plus risqué pour le bon fonctionnement du code :

<?php echo Convert_Sec_JHms(150200); // affiche 1j 17:43:20 ?>

Bien sur, on peut s'en servir très facilement avec une variable

Convert_Sec_JHms($Valeur);

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
6
MonkeyIsBack -> J'aimerais tout d'abord souligner que ton benchmark est biaisé. Quand tu fais une boucle sur une même partie de code, la partie qui est en boucle est précompilé à la deuxième itération ce qui permet un temps d'exécution beaucoup plus rapide surtout si le code utilise uniquement de l'arithmétique. Dans le cas des fonctions natives, ils sont compilées généralement dans des dll. Quand tu utilises des fonctions natives en boucles, le temps d'exécution à la première itération est généralement très proche de celui de la deuxième. Ce que ton benchmark a mesuré c'est la vitesse d'exécution de ton code quand il est précompilé par PHP.

Dans le cas de fonction pour transformer du temps en lettre, l'utilisation dans un page ce limite souvent à une ou à quelques utilisations. Dans ce cas, les fonctions natives sont à privilégier puisqu'ils sont déjà précompilés dans des dll. Si tu aurais fais des benchmarks sur le temps de première itération pour les deux fonctions, la fonction date aurait été la plus rapide.

P.S.: Des benchmarks c'est souvent comme des statistiques, on peut faire dire pratiquement n'importe quoi avec.
Messages postés
6
Date d'inscription
mercredi 28 novembre 2007
Statut
Membre
Dernière intervention
20 janvier 2008

Bonjour,

Voila, j'ai téléchargé le zip du programme de transformation du temps en sevcondes, minutes et heures, mais je ne sais pas comment l'éxecuter, ( je suis vraiment trés débutant).

Salutations
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Au temps pour moi, Arto a fait une erreur dans le format de la date ^^

Mais je persiste sur mon commentaire précédent... Ton code est quand même beaucoup moins clair.
Messages postés
9
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
27 juin 2011

Voici ma source actuelle sur mon site (et qui fonctionne vu que je l'ai vérifié à l'usage ^^)

function Convert_Sec_JHms($Seconde)
{
// Transformation Secondes en Jour Heure minute seconde
$Jour = floor($Seconde / 86400);
$Seconde = $Seconde - ($Jour * 86400); // Parenthèse facultative
$Heure = floor($Seconde / 3600);
$Seconde = $Seconde - ($Heure * 3600);
$Minute = floor($Seconde / 60);
$Seconde = $Seconde - ($Minute * 60);

// Ajout des zéros au cas où l'affichage soit en dessous de 10
if ($Heure < 10)
{$Heure = '0'.$Heure;}
if ($Minute < 10 AND $Minute > 0)
{$Minute = '0'.$Minute;}
if ($Minute == 0)
{$Minute = '00';}
if ($Seconde < 10)
{$Seconde = '0'.$Seconde;}

// Retourne une variable la plus petite possible
if ($Jour > 0)
{return $Jour.'j '.$Heure.':'.$Minute.':'.$Seconde;}
elseif ($Heure > 0)
{return $Heure.':'.$Minute.':'.$Seconde;}
else
{return $Minute.':'.$Seconde;}
}

PS : ma fonction ne donne aucune erreur possible, quelque soit le nombre de secondes, tout est exact à l'unité près ;-) (j'ai vérifié toutes les valeurs genre 60 seconde => 01:00, 3600 => 01:00:00, également pour le nombre de jours etc etc
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Ah mince, j'ai cliqué trop tôt, j'avais encore quelque chose à dire...
Le temps obtenu de 1.2 secondes est pour 200000 itérations... Ce qui veut dire que sur une seule exécution, la différence est vraiment dérisoire (en physique on parle de négligeable).
Il ne faut donc pas se focaliser trop sur les performances : mieux vaut accorder de l'importance à un code concis, qui ne laisse pas de place à l'erreur, facile à lire et à comprendre et donc facile à corriger/maintenir.
Suivant ces critères objectifs, le code d'Arto est le "meilleur".
Afficher les 17 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.