Temps en seconde ---> 00:00:00

Mammouth du PHP | 545 Messages

18 oct. 2007, 13:29

Bonjour,

J'ai un soucis ... plus moyen de revenir sur la méthode pour transformer un temps en seconde vers un format 'standard' de type 00:00:00 !
Pour l'instant, j'ai codé ceci:

Code : Tout sélectionner

<?php $km = ($course->kilometrage); $temps_explosee = explode(":", $clas->temps); $heure = $temps_explosee[0]; $minute = $temps_explosee[1]; $seconde = $temps_explosee[2]; $temps = (($heure*3600) + ($minute*60) + $seconde) / $km; echo $moyenne = $temps; ?>
L'objectif est d'avoir une moyenne kilométrique.
J'obtiens ceci 192.25490196078 et je voudrais obtenir ceci 00:03:12

Que dois-je faire ? Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

d0m
Mammouth du PHP | 1141 Messages

18 oct. 2007, 13:38

- soit utiliser la méthode date en prenant le timestamp du début d'une journée 0h00m00s et en ajoutant ton temps
- soit :
prendre la partie entière de la division de ton nombre de secondes par 3600 pour les heures
diviser le reste de la division par 60 et prendre la partie entière pour les minutes
le reste de la seconde division sera les secondes.

Petit nouveau ! | 8 Messages

18 oct. 2007, 13:39

Salut,

c'est plues des maths que du php je crois...
1/ pour avoir les minutes, tu divise ($heure*3600) + ($minute*60) + $seconde) par 60 et tu prends l'entier inférieur
2/ si c'est >60, tu divise le résultat par 60 et tu prends l'entier inférieur pour avoir les heures. Tu conserve le reste et tu refais l'étape 1
3/ Si c'est < 60, tu prend le reste et t'as les secondes

Mammouth du PHP | 545 Messages

18 oct. 2007, 20:50

Re,

J'ai pas trouvé comment faire avec le Timestamp alors j'ai essayé la 2e proposition

Code : Tout sélectionner

<?php $km = ($course->kilometrage); $temps_explosee = explode(":", $clas->temps); $heure = $temps_explosee[0]; $minute = $temps_explosee[1]; $seconde = $temps_explosee[2]; $moyenne = ((($heure*3600) + ($minute*60) + $seconde) / $km); $h_explosee = explode(".", ($moyenne / 100)); $moy_heure = (($h_explosee[0]) / 60); if ($moy_heure < 1){ $moy_heure = ''; }else {$moy_heure .= ':';} $moyenne = (($moyenne / 100) - $moy_heure); $m_explosee = explode(".", (($moyenne * 100)/60)); $moy_minute = ($m_explosee[0]); if ($moy_minute < 1){ $moy_minute = 0; } if ($moy_minute < 10) { $moy_minute = '0' . $moy_minute . ':'; } $moyenne = (($moyenne * 100) - ($moy_minute * 60)); $s_explosee = explode(".", ($moyenne)); $moy_seconde = ($s_explosee[0]); if ($moy_seconde < 1){ $moy_seconde = 0; } if ($moy_seconde < 10) { $moy_seconde = '0' . $moy_seconde; } echo $moy_heure . $moy_minute . $moy_seconde; ?>
N'est-ce pas un peu fastidieux ... n'existe-t-il pas une méthode plus courte ?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 oct. 2007, 21:52

As-tu essayé ça ? Je pense que ça correspond
date('H:i:s', $clas->temps)

Mammouth du PHP | 881 Messages

19 oct. 2007, 00:21

Pour ma part, je me suis fait deux petites fonctions que j'appelle souvent.

La première converti du numérique au chrono:
function ConvTemps ($TempsNum) {
			 //Mode d'enregistrement du temps : 
			 //		- Heures converties en minutes : 			  substr($TempsNum, 0, 2)*60
			 //		- Minutes restantes additionnées : 			  substr($TempsNum, 3, 2)
			 //		- Secondes converties en factions de minute : substr($TempsNum, 6, 2)/60
			   $Heures = floor(floor($TempsNum) / 60);
			   $Minute = floor($TempsNum - ($Heures*60));
 			   $Second = round(($TempsNum - ($Heures*60) - ($Minute)) * 60);
			   if ( $Heures < 10 ) { $TempsCalc = "0"; } else { $TempsCalc = ""; }
			   $TempsCalc .= $Heures.":";
			   if ( $Minute < 10) { $TempsCalc .= "0"; }
			   $TempsCalc .= $Minute.":";
			   if ( $Second < 10) { $TempsCalc .= "0"; }
			   $TempsCalc .= $Second; 
		return $TempsCalc;
}        

La deuxième fait l'inverse:
<?PHP 
function ConvTemps ($TempsTEMP) {
	   $posi1 = strpos($TempsTEMP, ":");
	   $HeureEnMinutes = substr($TempsTEMP, 0, ($posi1-0))*60;
	   $MinutesDirecte = substr($TempsTEMP, ($posi1 + 1), 2);
	   $SecondesEnMinu = substr($TempsTEMP, ($posi1 + 4), 2)/60;
	   $TempsDecimal = $HeureEnMinutes + $MinutesDirecte + $SecondesEnMinu;

		 return $TempsDecimal;
}
?>
Ce n'est peut-être pas la grande classe, mais ça fait le travail.
Soyez artisans de paix

Mammouth du PHP | 545 Messages

19 oct. 2007, 10:21

As-tu essayé ça ? Je pense que ça correspond
date('H:i:s', $clas->temps)
Maintenant oui ...
$km = ($course->kilometrage);
$temps_explosee = explode(":", $clas->temps);
	
$heure = $temps_explosee[0];
$minute = $temps_explosee[1];
$seconde = $temps_explosee[2];
			
$moyenne = ((($heure*3600) + ($minute*60) + $seconde) / $km);
			
echo date('H:i:s', $moyenne);
Ceci dit, il y a un problème puisque pour '192.25490196078 seconde' il me met '01:03:12' au lieu de '00:03:12' ... sinon, l'idée est meilleurs que la mienne :roll:

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

d0m
Mammouth du PHP | 1141 Messages

19 oct. 2007, 10:28

Ceci dit, il y a un problème puisque pour '192.25490196078 seconde' il me met '01:03:12' au lieu de '00:03:12'
c'est parce que le timestamp 0 équivaut au 1er janvier 1970 à 1:00:00 et pas 0:00:00

c'est pour cela que je te disais de prendre un jour (n'importe lequel à 0:00:00) et d'y ajouter tes secondes.
date('H:i:s',mktime(0,0,0,1,1,1995)+$temps);

Mammouth du PHP | 545 Messages

19 oct. 2007, 10:33

c'est parce que le timestamp 0 équivaut au 1er janvier 1970 à 1:00:00 et pas 0:00:00

c'est pour cela que je te disais de prendre un jour (n'importe lequel à 0:00:00) et d'y ajouter tes secondes.
date('H:i:s',mktime(0,0,0,1,1,1995)+$temps);
Effectivement, cela fonctionne beaucoup mieux ainsi :roll:

Merci

NB: Je garde aussi l'idée de faire une fonction pour les appels ... cela sera plus facile !
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

19 oct. 2007, 11:46

il me met '01:03:12' au lieu de '00:03:12'
En fait je n'ai pas pensé que le fuseau horaire serait pris en compte. Si tu avais été dans les îles Fidji tu aurais eu 12:03:12... Pour avoir un timestamp avec un fuseau horaire "neutre" tu peux utiliser gmdate()
gmdate('H:i:s', 1);
Je ne l'ai pas précisé, mais ce n'est valable que pour les temps de moins de 24 heures, ça devrait être assez même pour un gros marathon :lol:
le timestamp 0 équivaut au 1er janvier 1970 à 1:00:00
En fait, le principe c'est que le timestamp 0 équivaut au 1er janvier 1970 à 0:00:00 à l'heure de Greenwich (UTC), donc une heure plus tard pour nous, Français.

Mammouth du PHP | 545 Messages

19 oct. 2007, 13:11

Je ne l'ai pas précisé, mais ce n'est valable que pour les temps de moins de 24 heures, ça devrait être assez même pour un gros marathon :lol:
Surtout que c'est une moyenne kilométrique ... même en rampant, cela devrait être bon :lol:
le timestamp 0 équivaut au 1er janvier 1970 à 1:00:00
En fait, le principe c'est que le timestamp 0 équivaut au 1er janvier 1970 à 0:00:00 à l'heure de Greenwich (UTC), donc une heure plus tard pour nous, Français.[/quote]
Belgique pour moi :roll:

Merci à tous pour vos coups de main
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!