begin process at 2012 05 27 19:51:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > DÉBUTANT : FONCTION POUR TRANSFORMER UN TEMPS EN SECONDES EN JOUR HEURE MINUTE SECONDE

DÉBUTANT : FONCTION POUR TRANSFORMER UN TEMPS EN SECONDES EN JOUR HEURE MINUTE SECONDE


 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

  • <!-- 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;}
  • }?>
<!-- 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);

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

MULTIPLIEZ LES TIMERS SUR VOS SCRIPTS PHP ET BENCHEZ FACILEM...

 Sources de la même categorie

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

 Sources en rapport avec celle ci

Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
COMPTEUR DE VISITE - FICHIER TXT - CODE MINIMAL par SuperChouquette
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture COMPTEUR LIVE TXT TRÈS SIMPLE par clad87
Source avec Zip Source avec une capture COMPTEUR DE VISITES AVEC IMAGE PNG par lucas74

Commentaires et avis

Commentaire de lefter le 14/11/2009 12:46:37

Un code un peu plus court :

function Convert_Sec_JHms($Seconde){
   return (floor($Secondes/86400)).'j '.date('G',$Secondes).':'.date('i',$Secondes).':'.date('s',$Secondes);
}

Commentaire de lefter le 14/11/2009 12:51:44

function Convert_Sec_JHms($Seconde){
   if ($Secondes>86400)
      return (floor($Secondes/86400)).'j '.date('G',$Secondes).':'.date('i',$Secondes).':'.date('s',$Secondes);
   return date('G',$Secondes).':'.date('i',$Secondes).':'.date('s',$Secondes);
}

Commentaire de MonkeyIsBack le 14/11/2009 16:10:08

Effectivement ! La fonction date ... serais-je bète ...



J'ai toute fois un doute, je me demande ce qui est le plus performant. Appeler une fonction complexe cinq fois de suite ou effectuer de simples calculs de variables ^^...


Sinon ta solution est bien plus propre en effet ;-)

Commentaire de MonkeyIsBack le 14/11/2009 16:24:12

Erf il n'y a pas de fonction éditer :S

Je me suis demandé si quelques simples calculs de variables n'étaient pas plus rapides qu'appeller la fonction date, à ce sujet, j'ai donc décidé de me pencher sur la question et ai réalisé un simple benchmark ...

le voici pour les deux fonctions, la tienne et la mienne (je n'ai d'ailleurs même pas testé l'affichage de la tienne, j'ai copié la deuxième uniquement ^^...

Voici ce que PHP me retourne :

Premiere fonction :12.383121 milliseconde pour 10 000 executions
Deuxieme fonction :16.192253 milliseconde pour 10 000 executions


et le code du bench

function Convert_Sec_JHmsA($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;}
}


function Convert_Sec_JHmsB($Seconde){
   if ($Secondes>86400)
      return (floor($Secondes/86400)).'j '.date('G',$Secondes).':'.date('i',$Secondes).':'.date('s',$Secondes);
   return date('G',$Secondes).':'.date('i',$Secondes).':'.date('s',$Secondes);
}

$i = 0;
  $timeparts = explode(' ',microtime());
  $starttime = $timeparts[1].substr($timeparts[0],1);
while ($i< 1000){
++$i;
$randA = rand(0, 500000);
Convert_Sec_JHms($randA);
}
  $timeparts = explode(' ',microtime());
  $endtime = $timeparts[1].substr($timeparts[0],1);
  echo 'Premiere fonction :',bcsub($endtime,$starttime,6),' milliseconde pour 10 000 executions<br />';

$i = 0;
  $timeparts = explode(' ',microtime());
  $starttime = $timeparts[1].substr($timeparts[0],1);
while ($i< 1000){
++$i;
$randB = rand(0, 500000);
Convert_Sec_JHmsB($randB);
}
  $timeparts = explode(' ',microtime());
  $endtime = $timeparts[1].substr($timeparts[0],1);
  echo 'Deuxieme fonction :',bcsub($endtime,$starttime,6),' milliseconde pour 10 000 executions';

Commentaire de MonkeyIsBack le 14/11/2009 16:30:10

PS : zut, n'ayant pas bougé ma propre fonction d'où elle était (dans un include, c'est une fonction dont moi même je me sers), le résultat c'est que le code que j'ai filé au dessus est faux =>

Convert_Sec_JHmsA($randA);




Dans la boucle ;)


Note : le temps d'execution d'une seule fois les fonctions : (puisqu'on y est ><) et donc approximativement :

Calcul précédent de 10 000 fois la fonction - 10 000 génération d'aléatoire & boucle :P = 12.383121 - 0.005005 secondes / 10 000 => 1,2 milliseconde pour une execution de ma fonction, et 1,6 pour la sienne ^^

Commentaire de Arto_8000 le 14/11/2009 16:41:32

C'est inutile d'appeler 3 fois la méthode date quand on peut tout faire en un appel ...

function Convert_Sec_JHmsB($Seconde){
   if ($Secondes>86400)
      return (floor($Secondes/86400)).'j '.date('G:s:i',$Secondes);
   return date('G:i:s',$Secondes);
}

Commentaire de neigedhiver le 16/11/2009 10:46:30

Salut,

Concernant cette source qui n'en est finalement pas une (mais plutôt un snippet à poster sur codyx), tuot a été dit...
Concernant le code, personne ne semble avoir été choqué par cette étrange pratique qui consiste à utiliser while pour faire une division à l'aide de soustractions... :

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

Que l'on me pardonne, mais ce morceau de code est franchement dégueulasse... Oui, dans les propositions qui ont été faites, il a été remplacé. Mais il me paraît important d'avertir l'auteur qu'écrire du code comme ça, c'est vraiment crade... On pourrait aussi reproduire en PHP les instructions en Langage Machine, ça fonctionnerait... Mais quel gaspillage d'énergie et de ressources système pour faire justement ce dont un langage de haut niveau permet de se dispenser.

Commentaire de MonkeyIsBack le 16/11/2009 11:05:39

Effectivement, tu as parfaitement raison !
Voici donc le nouveau code, encore plus efficace, merci pour ta critique / remarque :

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


Est-ce la bonne méthode ?

Commentaire de neigedhiver le 16/11/2009 11:15:46

Ben concrètement, là tu ne réinventes pas la division euclidienne, donc oui, c'est forcément mieux.
Mais il n'en reste pas moins que les méthodes proposées qui font ça en deux lignes sont ENCORE plus efficaces... ;)
Notamment les deux lignes d'Arto sont, à mon sens, la solution à privilégier. Elle pourrait être postée sur Codyx, si une telle fonction n'y figure pas déjà.

Merci de ne pas t'être vexé à la lecture de ma critique (je le craignais un peu, certains ici s'enflamment pour moins que ça) et de la prendre de manière constructive.
Au final, ta source n'a pas sa place ici, mais sa publication aura eu le mérite d'exposer ton code à la critique et de te faire progresser, donc c'est quand même une bonne chose.

Bonne continuation.

Commentaire de MonkeyIsBack le 16/11/2009 11:20:19

Ouep.

Cependant j'ai fait des "benchmarks" (regardes un peu plus haut dans les commentaires), et niveau performances, c'est bel et bien mon bout de script avec des while qui était plus rapide, donc si on privilégie les performances, la toute dernière "version" est bel et bien la meilleure, même si elle ne fait pas appel à la fonction date initialement prévue à cet effet (et à d'autres d'ailleurs même si elle se révèle bien plus pratique pour l'affichage du nom des jours par exemple ...)

Commentaire de MonkeyIsBack le 16/11/2009 11:30:25

Allez je continue sur ma propre lancée ...

Voici un remaniement de la fin de la fonction :

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

Commentaire de neigedhiver le 16/11/2009 12:06:18

Le code d'Arto est environ 2 fois plus rapide que celui de ta source actuelle.
D'ailleurs, le résultat n'est pas le même (je pense que celui d'Arto a plus de chances d'être le bon du fait que le traitement effectué ne laisse pas de place à l'erreur). Autrement dit, ta source renvoit un résultat erroné.

Pour ce qui est des modifications que tu apportes au fur et à mesure, ce serait bien d'avoir la source complète avec... J'ai bien essayé de faire une fonction en collant les morceaux, mais elle me retourne 00:00 qui n'est manifestement pas le résultat attendu...

J'ai mis le code de mon bench ici : http://tools.codes-sources.com/copy-paste-code.aspx?ID=244

Commentaire de neigedhiver le 16/11/2009 12:09:05

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".

Commentaire de MonkeyIsBack le 16/11/2009 12:11:06

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

Commentaire de neigedhiver le 16/11/2009 13:10:30

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.

Commentaire de abdou1950 le 16/11/2009 17:07:35

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

Commentaire de Arto_8000 le 17/11/2009 00:55:33

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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

compteur de nombre de visiteurs connecté [ par developvbdebut ] Bonjour tout le mondeQuel qu'un a ti'l déja utilisé la source de antidoteVoici le nom de la source ce dessou:COMPTEUR DE VISITEURS CONNECTÉS EN TEMPS Compteur de nombre de commentaires posté pour une news [ par jeromeke ] Voila je comprend pas trop le principe alors si qqun pourrait m'aider je serais ravis!Merci d'avance,Jérôme probleme phpsessid [ par soothsayer ] Bonjour,j'ai un petit soucis que je ne parviens pas à résoudre:sur l'index de mon site (page d'accueil avec compteur de visites "basique" en php )lors un compteur juste pour moi. [ par toff63 ] Bonsoir,Nouveau sur ce site et débutant en php, je tiens d'abord à vous féliciter de la richesse de celui ci.Voilà ma question:Je cherche à comptabili compteur de visiteurs php [ par kamy31 ] salut tout le monde,j'ai réalisé un site en php et  j'avais un problème concernat l'insertion de nombre de visiteurs dans ma page d'acceuil php, pour Compteur personnalisé : nombre de décès [ par yukisan ] Bonjour à tous, mon premier message sur le forum malgré que je connaisse ce site depuis pas mal de temps. Voilà pour en revenir à l'objet de mon mess Compteur telechargement [ par draluorg ] Salut a tous,J'ai un petit blog ipb sur le quel je publie des ptits softs que je cré mais la limite de la taille pour l'upload de fichier joint est de Compteur de visite [ par texis12 ] Bonjour à tous, je débute en PHP et j'aimerais créer un compteur de visite, mais pas un simple compteur qui augmente à chaque rafraîchissement de pag compteur d'acces a une image [ par franco_se ] bonjourje voudrais savoir s'il est possible de compter le nombre d'appel d'une image par un site distant?en fait, j'utilise une image sur un forum, et Nombre pair, impair [ par ldevun ] Bonjour,Existe t-il une fonction permettant de retourner uniquement les valeurs pair ou les valeurs impairs?Merci


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales