Insérer un temps dans une BDD

Petit nouveau ! | 4 Messages

25 sept. 2007, 20:21

Bonjour à tous.
Je suis en ce moment même en train de réaliser un petit script PHP pour mon équipe sur Trackmania Nations, et j'aimerai que ma BDD contienne les records personnel des joueurs, sous la forme mm:ss:cc (mm=minute, ss=seconde, cc=centieme). L'idée final étant de faire la moyenne des records de chaque joueurs, pour obtenir un temps.
Exemple :

Joueur 1 map 1 : 00:58:10
Joueur 1 map 2 : 01:02:00
Moyenne temps joueur 1 : 1:00:00.

Je me doute que cela ne doit pas être très compliqué, mais je bloque...J'en appelle donc à votre aide !
Merci d'avance :). Bonne journée.

Eléphant du PHP | 187 Messages

25 sept. 2007, 21:17

Salut,
idée bete : stocker les resultat dans la plus petite unité necessaire
par exemple si tu va jusqu'a la seconde :
1:58 = 118
apres pour faire la moyenne c simple : tu recuperes tous les temps et tu divises par le nombre de résultats : tu auras le temps moyen en secondes ;)
Netsupra

Petit nouveau ! | 4 Messages

25 sept. 2007, 22:03

Oui c'est une bonne idée merci, j'y avais songé moi aussi en suite :).
Merci en tout cas.

EDIT : En fait j'ai un legers problèmes, je n'arrive pas à reconvertir les centièmes en minutes/secondes/centièmes...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 sept. 2007, 10:32

Une minute ça fait 60 secondes, une seconde ça fait 100 centièmes.. suffit donc de multiplier tes secondes par 100, tes minutes par 60*100, d'additionner le tout et hop, t'as une valeur en centièmes.

Pour revenir aux valeurs d'origine on fait l'inverse : tu as une valeur en centième que tu divises par 60*100 pour obtenir les minutes (en arrondissant à l'inférieure). Ce qui reste de la division (que tu peut obtenir à l'aide de l'opérateur modulo "%"), tu le divises par 60 pour obtenir les secondes (en arrondissant une fois encore à l'inférieur), et ce qui reste de cette nouvelle division ce sont tes centièmes :)
$minutes = floor( $valeur / (60 * 100) ); // nb de minutes contenues dans ta valeur
$reste1 = $valeur % (60 * 100); // nb de centièmes restants

$secondes = floor ( $reste1 / 60 ); // nb de secondes contenues dans les centièmes restants
$centiemes = $reste1 % 60; // nouveau nb de centièmes restants
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

26 sept. 2007, 13:29

Clair, net, précis. Merci beaucoup :).

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 sept. 2007, 13:57

Modération :
Si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet. ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

26 sept. 2007, 14:32

Cela fonctionne très bien, mise à part lorsque le temps est inférieur à une minute. Par exemple mon temps est 37sec39centièmes et ça m'affiche 00:62:19...Je suis en train de chercher ce qui pourrait clocher.

EDIT : J'ai compris l'erreur, elle se trouvait ici :

$secondes = floor ( $reste1 / 100 ); // nb de secondes contenues dans les centièmes restants

Car il y a 100 centième dans une seconde, non pas 60 ;). Merci de l'aide. Je pense que mon problème est maintenant résolu. Merci encore :wink: .

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 sept. 2007, 15:10

Oops, au temps pour moi :)

J'ai plus l'habitude de m'arrêter aux secondes que de descendre jusqu'aux centièmes :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...