Temps décimal vers HH:MM:SS

Mammouth du PHP | 545 Messages

22 déc. 2006, 23:32

Salut,

J'ai une fonction qui me donne un temps décimal que je voudrais retranscrire au format habituel (hh:mm:ss) !

N'étant pas un pro du JavaScript (un pro de rien d'ailleurs), je voudrais savoir si je peux m'y prendre de cette façon pour récupérer une variable temps et ensuite pouvoir la stocker dans une table:
function formatHeure (){
	var nbr = 15.95888888888;
	var heure = parseInt(nbr);
	var minute = parseInt((nbr - heure) * 60);
	var seconde = parseInt((((nbr - heure) * 60) - minute) * 60);
	// alert (heure + ":" + minute + ":" + seconde);
	var tica1000 = heure + ":" + minute + ":" + seconde;
	document.forms.test.tica1000.readonly = false;
	document.forms.test.tica1000.value = String( tica1000 );
	document.forms.test.tica1000.readonly = true;
}
C'est bien l'heure attendu qui m'est retourné mais est-ce une méthode sans problème et sans faute ?

Merci
Sebe

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

Mammouth du PHP | 545 Messages

24 déc. 2006, 00:01

Re,

Visiblement personne ne trouve de problème !

J'aimerai quand même poser une question sur 'parseInt()'; je me demande s'il ne serait pas mieux de mettre 'Math.floor()'
La méthode floor() retourne le plus grand entier inférieur ou égal à la valeur donnée en paramètre.
Qu'en pensez-vous ?

Merci
Sebe

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

Mammouth du PHP | 545 Messages

24 déc. 2006, 11:39

Malheureusement, la fonction ne marche pas et je ne sais vraiment pas pourquoi !
Sebe

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

ViPHP
ViPHP | 1961 Messages

24 déc. 2006, 13:38

Malheureusement, la fonction ne marche pas et je ne sais vraiment pas pourquoi !
C'est pas très parlant tout ça.
Un message d'erreur?
Elle ne rends pas le résultat escompté ?
Quel est le PB ?
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 545 Messages

24 déc. 2006, 14:17

Salut,
C'est pas très parlant tout ça.
Un message d'erreur?
Elle ne rends pas le résultat escompté ?
Quel est le PB ?
C'est vrai ... le résultat n'est pas celui attendu mais j'ai en partie résolut mon problème:
function formatHeure (){
    var nbr = 47735;
    if (nbr != 0) { 
        alert ("Le nbr " + nbr + " à mettre en heure !");
        var heure = Math.floor(nbr / 3600);
        var minute = Math.floor((nbr - (heure * 3600))/60 );
        var seconde = Math.floor(nbr - (heure * 3600) - (minute * 60));
        alert (heure + ":" + minute + ":" + seconde);
        return heure + ":" + minute + ":" + seconde;
    } else {
        return (false);
    } 
Là, le résultat est bon mais, comme je suis en plein travail ... je cherche à récupérer la bonne valeur 'nbr' pour mon compte personnel et j'ai oublié de dire que c'était ok !

Je mettrais ma fonction toute finie pour voir s'il n'y a pas moyen d'y apporter des améliorations !

Merci
Sebe

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

ViPHP
ViPHP | 1961 Messages

24 déc. 2006, 16:34

Bonjour,
Je vais me permettre de te donner deux petits conseils.
Quant tu testes QQ chose, essaie de la faire dans les conditions les plus proches de la réalité.
Ta fonction est sensée être appelée, fait-le dans tes tests.
Si tu fais ça tu t'aperçois qu'il te faut gérer un paramètre et qui dit gestion de paramètres, dit test(s).
Tu testes si nbr est different de 0, bien, mais si il est :
Si ce n'est pas un entier ? (ça reste != de 0)
Si il est négatif, que se passe-t-il?
Si ce nombre (entier et positif) est supérieur au nombre de secondes d'une journée?
Essaie de mettre ça en place.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 545 Messages

26 déc. 2006, 01:16

Salut,
Bonjour,
Je vais me permettre de te donner deux petits conseils.
Quant tu testes QQ chose, essaie de la faire dans les conditions les plus proches de la réalité.
Ta fonction est sensée être appelée, fait-le dans tes tests.
Si tu fais ça tu t'aperçois qu'il te faut gérer un paramètre et qui dit gestion de paramètres, dit test(s).
Tu testes si nbr est different de 0, bien, mais si il est :
Si ce n'est pas un entier ? (ça reste != de 0)
Si il est négatif, que se passe-t-il?
Si ce nombre (entier et positif) est supérieur au nombre de secondes d'une journée?
Essaie de mettre ça en place.
Tu as 100 fois raisons mais si je n'ai pas regardé à cela c'est simplement que cette fonction est appelé par une autre qui se sera déjà occupé des tests !

Part ailleurs, je ne peux pas mettre la total car j'ai une erreur quelque part et je pense savoir où ... avant de poser la question, j'aimerai essayé de la régler moi-même :roll: et je n'ai pas encore eu vraiment le temps à cause des fêtes un peu trop :boire4: :boire9:

Un grand merci
Sebe

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

Mammouth du PHP | 545 Messages

27 déc. 2006, 00:47

Salut,

Voilà, j'ai réussi ma fonction et elle tourne ... hip, hip, hourrrrra !
L'action:
<input name="submit" type="button" onclick="copieFc(document.getElementById('fcp3')); tica();" value="Evaluation" >
Et la fonction:
// **************************** Calcul du Temps Indicatif sur 1000 en Capacité Aérobie ****************************
function tica () {
	vma = document.forms.test.vma.value; // volontairement implicite
	// alert ("la VMA est de " + vma);
	pma = ((85 + 70.0280112044818) /2);
	// alert ("la PMA est de " + pma);
	ticaint = (Math.round((pma*vma/100)*1000)/(3.6*(pma*vma/100)));
	// alert ("La tica est de " + ticaint + " à mettre en heure !");
	var heure = Math.floor(ticaint / 3600);
	var minute = Math.floor((ticaint - (heure * 3600)) / 60);
	var seconde = Math.floor(ticaint - (heure * 3600) - (minute * 60));
	// alert (heure + ":" + minute + ":" + seconde);
	tica1000 = heure + ":" + minute + ":" + seconde;
	// alert ("Tica1000 est de " + tica1000);
	document.forms.test.tica1000.readonly = false;
	document.forms.test.tica1000.value = String( tica1000 );
	document.forms.test.tica1000.readonly = true;
}
// **************************** Fin du calcul du Temps Indicatif sur 1000 en Capacité Aérobie ****************************
Questions:
- Est-il possible d'améliorer ma fonction sans pour autant simplifier les calcules?
- Lors du revoit dans le champ 'tica1000', j'aimerai avoir une réponse du type '00:04:37' plutôt que '0:4:37' actuellement mais je ne vois pas comment 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!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

27 déc. 2006, 00:56

Je n'ai pas d'idées sur la simplification des calculs mais pour le formatage :

heure = (heure < 10) ? "0"+heure : heure ;
minute = (minute < 10) ? "0"+minute : minute;
seconde= (seconde< 10) ? "0"+seconde : seconde;
tica1000 = heure + ":" + minute + ":" + seconde;

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 545 Messages

27 déc. 2006, 01:10

Je n'ai pas d'idées sur la simplification des calculs mais pour le formatage :

heure = (heure < 10) ? "0"+heure : heure ;
minute = (minute < 10) ? "0"+minute : minute;
seconde= (seconde< 10) ? "0"+seconde : seconde;
tica1000 = heure + ":" + minute + ":" + seconde;
Même si tu avais l'air certain de ton coup, je voulais te confirmer que cela tourne comme je l'avais rêvé ... en local car je n'ai pas encore essayé sur mon serveur !

Un très grand merci
Sebe

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