Fonction SI dans du code XHTML & Java Script

Fermé
Toriki16 Messages postés 7 Date d'inscription jeudi 25 mars 2010 Statut Membre Dernière intervention 7 avril 2010 - Modifié par Toriki16 le 26/03/2010 à 20:15
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 - 29 mars 2010 à 22:34
Bonjour,

Je m'amuse à faire un comptes à rebours

Maintenant que j'ai réussi à faire la correction automatique des fautes (S en trop quand le nombre arrivait à 1 ou 0) J'aimerai faire un truc un peu plus difficile dans ce que je m'amuse à faire mais c'est carrément hors de mes compétences.

Je voudrais tout simplement que lorsque un des nombres arrive à 0 dans un compte à rebours, et bien tout le texte auquel il se rapporte disparaisse.

Exemple:

Transformer cette phrase

Il ne reste plus que 0 jour 1 heure 0 minute et 32 secondes avant que ce compte à rebours n'arrive à zéro

en

Il ne reste plus que 1 heure et 32 secondes avant que ce compte à rebours n'arrive à zéro

et pourquoi pas que le "et " se rapporte à la parti juste avant lui si celui juste devant à disparu.

Exemple:

Transformer cette phrase

Il ne reste plus que 0 jour 1 heure 23 minutes et 0 seconde avant que ce compte à rebours n'arrive à zéro

en

Il ne reste plus que 1 heure et 23 minutes avant que ce compte à rebours n'arrive à zéro

Bien sur cela devra le faire pour tous les cas. Et il devra aussi disparaitre quand il n'y aura plus qu'une seule valeur.

Exemple:

Transformer cette phrase

Il ne reste plus que 0 jour 0 heure 1 minute et 0 seconde avant que ce compte à rebours n'arrive à zéro

en

Il ne reste plus que 1 minute avant que ce compte à rebours n'arrive à zéro

Auriez vous la solution ?

Merci bien.

Pour rappel, voilà le code en entier :
 
<html> 
<head> 

<script language="JavaScript"> 

var cible = new Date("April 18, 2010 08:30:00"); 

var mms_jour = 24 * 60 * 60 * 1000; 
var mms_heure = 60 * 60 * 1000; 
var mms_minute = 60 * 1000; 
var mms_seconde = 1000; 

function decompte()  

{var aujourdhui = new Date(); 

var change_j = -1; 
var change_h = -1; 
var change_m = -1; 

var diff_mms = cible.getTime() - aujourdhui.getTime(); 

diff_jours = Math.floor(diff_mms / mms_jour); 
diff_mms -= diff_jours * mms_jour; 

diff_heures = Math.floor(diff_mms / mms_heure); 
diff_mms -= diff_heures * mms_heure; 

diff_minutes = Math.floor(diff_mms / mms_minute); 
diff_mms -= diff_minutes * mms_minute; 

var diff_secondes = Math.floor(diff_mms / mms_seconde); 

var label_jours = (diff_jours = 1)? ' jour,':' jours,'; 
var label_heures = (diff_heures = 1)? ' heure,' : ' heures,'; 
var label_minutes = (diff_minutes = 1)? ' minute et' : ' minutes et'; 
var label_secondes = (diff_secondes = 1)? ' seconde' : ' secondes'; 

document.getElementById("jours").innerHTML = diff_jours + label_jours; 
document.getElementById("heures").innerHTML = diff_heures + label_heures ; 
document.getElementById("minutes").innerHTML = diff_minutes + label_minutes; 
document.getElementById("secondes").innerHTML = diff_secondes + label_secondes ; 

setTimeout("decompte()",1000);} 

</script>  

</head> 

<body  onLoad="decompte()"> 

<form name="formulaire"><font face="French script MT" size="6"> 

<p>Il ne reste plus que  

<span id="jours">0</span>  
<span id="heures">0</span> 
<span id="minutes">0</span> 
<span id="secondes">0</span>  

avant que ce compte à rebours n'arrive à zéro.</p> 

</form> 

</body> 
</html> 




A voir également:

2 réponses

Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
Modifié par Giorgiolino le 29/03/2010 à 22:53
Salut,

j'ignore quelles sont tes motivations à faire cela mais bon passons.
J'ai réussi à faire que le texte correspondant s'afface lorsque la valeur associée devient nulle. Quant à gérer la ponctuation avec les "et" et consorts, ça demande un peu plus de travail et je te le laisse en exercice. Ou alors éventuellement un jours si j'ai le temps.

Ci-après le code modifié de la fonction decompte() :
function decompte(madate) { 

var aujourdhui = new Date(); 
var change_j = -1; 
var change_h = -1; 
var change_m = -1; 

var diff_mms = madate.getTime() - aujourdhui.getTime(); 

diff_jours = Math.floor(diff_mms / mms_jour); 
diff_mms -= diff_jours * mms_jour; 

diff_heures = Math.floor(diff_mms / mms_heure); 
diff_mms -= diff_heures * mms_heure; 

diff_minutes = Math.floor(diff_mms / mms_minute); 
diff_mms -= diff_minutes * mms_minute; 

var diff_secondes = Math.floor(diff_mms / mms_seconde); 



// Déclaration et calcul des labels 
var label_jours; 
var label_heures; 
var label_minutes; 
var label_secondes; 

// Exercice : refactoriser le code de calcul des labels 
if (diff_jours == 0){ label_jours ='';} 
else { label_jours = (diff_jours <= 1)? diff_jours+ ' jour':diff_jours + ' jours';} 

if (diff_heures == 0) { label_heures ='';} 
else { label_heures = (diff_heures <= 1)? diff_heures+' heure' : diff_heures+' heures';} 

if (diff_minutes == 0) { label_minutes ='';} 
else { label_minutes = (diff_minutes <= 1)? diff_minutes+' minute' : diff_minutes+' minutes';} 

if (diff_secondes == 0) { label_secondes =''} 
else { label_secondes = (diff_secondes <= 1)? diff_secondes+' seconde' : diff_secondes+' secondes';} 


// Affichage par sélection du noeud html 
document.getElementById("jours").innerHTML = label_jours; 
document.getElementById("heures").innerHTML = label_heures; 
document.getElementById("minutes").innerHTML = label_minutes; 
document.getElementById("secondes").innerHTML = label_secondes; 



setTimeout("decompte(cible)",1000); 

} 


@+

"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein
0
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
Modifié par Giorgiolino le 29/03/2010 à 22:34
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein
0