Page 1 sur 1

Temps décimal vers HH:MM:SS

Posté : 22 déc. 2006, 23:32
par Sebe
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

Posté : 24 déc. 2006, 00:01
par Sebe
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

Posté : 24 déc. 2006, 11:39
par Sebe
Malheureusement, la fonction ne marche pas et je ne sais vraiment pas pourquoi !

Posté : 24 déc. 2006, 13:38
par Ajoloca
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 ?

Posté : 24 déc. 2006, 14:17
par Sebe
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

Posté : 24 déc. 2006, 16:34
par Ajoloca
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.

Posté : 26 déc. 2006, 01:16
par Sebe
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

Posté : 27 déc. 2006, 00:47
par Sebe
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

Posté : 27 déc. 2006, 00:56
par Truc
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;

Posté : 27 déc. 2006, 01:10
par Sebe
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