[JavaScript] Compte et Decompte

Compte et Decompte [JavaScript] - HTML/CSS - Programmation

Marsh Posté le 16-06-2006 à 00:05:31    

Bonjour, j'ai un problème avec un mini logiciel que j'essaye de faire :
 
Je veux faire apparaitre sur 3 champs distinct :
- l'heure actuelle
- l'heure d'un prochain événement ( qui ici apparait tout les 84 min )
- un compte à rebours de l'arrivé de cet evenement
 
A prioris ca parait simple, mais quelque chose déconne, et je ne vois pas quoi.
 
Je copie mon code ici, si quelqu'un pouvais m'aider ca serais sympa :)
 

Code :
  1. <html><head>
  2. <title>Gain SXP</title>
  3. <script type="text/javascript">
  4. var temps = new Date;
  5. var heure = temps.getHours();
  6. var minute = temps.getMinutes();
  7. var seconde = temps.getSeconds();
  8. var heuregain = 10 ;
  9. var minutegain = 11 ;
  10. var secondegain = 12 ;
  11. var heurerestant = heuregain - heure ;
  12. var minuterestant = minutegain - minute ;
  13. var seconderestant = secondegain - seconde ;
  14. function HeureCheck()
  15. { if (sec < 10)
  16.   { sec0 = "0"; }
  17.   else
  18.   { sec0 = ""; }
  19.         if (min < 10)
  20.         { min0 = "0"; }
  21.         else
  22.         { min0 = ""; }
  23.               if (heure < 10)
  24.               { heure0 = "0"; }
  25.               else
  26.               { heure0 = ""; }
  27.      
  28.   HeureActu = heure0 + heure + ":" + min0 + min + ":" + sec0 + sec ;
  29.   document.chrono.CurrentTime.value = HeureActu ;
  30.  
  31.   if ( heure >= heuregain )
  32.      { if ( minute >= minutegain )
  33.        { heuregain = heuregain + 1 ;
  34.          minutegain = minutegain + 24 } }
  35.   if ( minutegain >= 60 )
  36.      { minutegain = minutegain - 60 ;
  37.        heuregain = heuregain + 1 }
  38.   if ( heuregain >= 24 )
  39.      { heuregain = heuregain - 24 }
  40.   TempsGain = heuregain + ":" + minutegain + ":" + secondegain ;
  41.   document.chrono.GainTime.value = TempsGain ;
  42.  
  43.   if ( minuterestant < 0 )
  44.      { minuterestant = minuterestant + 60 ;
  45.        heurerestant = heurerestant - 1 } }
  46.  
  47.   TempsGain = heuregain + ":" + minutegain + ":" + secondegain ;
  48.   document.chrono.GainTime.value = TempsGain ;
  49.  
  50. </script>
  51. </head>
  52. <body onLoad="HeureCheck();">
  53. <form name="chrono">
  54. <input type="text" name="CurrentTime" size=5 readonly="1"> Heure actuelle <br /><br />
  55. <input type="text" name="GainTime" size=5 readonly="1"> Heure du prochain gain <br /><br />
  56. <input type="text" name="GainTimeLeft" size=5 readonly="1"> Temps restant
  57. </form>
  58. </body>
  59. </html>


Message édité par HolySpirit le 16-06-2006 à 01:40:56
Reply

Marsh Posté le 16-06-2006 à 00:05:31   

Reply

Marsh Posté le 16-06-2006 à 01:18:24    

Salut!
 
Il y a plusieurs problèmes dans ton script:
 
- Tu déclares la variable "min" et "sec" mais tu utilises "minute" et "seconde"
- Le "Have OK" n'a rien à faire là :  { sec0 = "0"; }have Ok
- Il manque un paquet de ";"
 
Il est préférable de ne pas utiliser des noms de fonction comme nom de variable (comme min ou time)
 
Et si tu veux une solution à ton problème, il faudrait déjà que tu l'exposes!  
Parce que : <<A prioris ca parait simple, mais quelque chose déconne, et je ne vois pas quoi.>>
Ben moi non plus! :)
 
Sinon, tu n'affectes nulle part la valeur du champ "GainTimeLeft" et si tu veux un compte à rebours, il faudrait appeler la fonction à intervalle régulier...

Reply

Marsh Posté le 16-06-2006 à 01:44:09    

Alors, j'ai édité le code en corrigeant les erreurs que tu m'as indiqué.
 
Par contre, je ne vois pas où il manque des ";" ?
J'en ai mis après chaque instructions, sauf la dernière du programme, et a priori je n'ai pas besoin d'en mettre après une boucle if, si ?
 
J'ai rajouté l'affection de "GainTimeLeft" (j'avais oublié de la remettre après l'avoir retiré un moment)
 
Et désolé si je n'ai pas été assez précis lors de mon 1er post !
En fait, je n'arrive pas a affecter les valeurs aux inputs du formulaire. Ceux-ci restent désespérément vide, et je ne sais pas pourquoi =/

Reply

Marsh Posté le 16-06-2006 à 09:25:29    

tu utiliserai l'objet date tu t'emmerderai largement moins, en plus ton script ne gère absolument pas les jours :o et donc c'est foireux :o
Et pourquoi s'emmerder comme tu le fais alors qu'avec date ça marche comme sur des roulettes : (codé en 1h) (ouais je sais c'est beaucoup mais j'étais tombé sur une erreur de débutant) :(

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <title></title>
  5. <script>
  6. var eventTime = initDate(2006,6,25,16,40,35);
  7. /*initialise une nouvelle date*/
  8. function initDate(annee, mois, jour, heure, secondes, minutes) {
  9.  var newDate = new Date();
  10.  newDate.setYear(annee);
  11.  newDate.setMonth(mois);
  12.  newDate.setDate(jour);
  13.  newDate.setHours(heure);
  14.  newDate.setSeconds(secondes);
  15.  newDate.setMinutes(minutes);
  16.  return newDate;
  17. }
  18. /*ecrit une date dans un elt*/
  19. function writeTime(eltId, time, allhours) {
  20.  var elt = document.getElementById(eltId);
  21.  if (allhours) {
  22.   var h=time.getDate()*24+time.getHours();
  23.  } else {
  24.   var h=time.getHours();
  25.  }
  26.  var m=time.getMinutes();
  27.  var s=time.getSeconds();
  28.  elt.value = ((h<10) ? "0"+h : h) + ":" + ((m<10) ? "0"+m : m) + ":" + ((s<10) ? "0"+s : s);
  29. }
  30. /*Fonction qui s'occupe de gerer le decompte*/
  31. function updateTime() {
  32.  var time = new Date();
  33.  var restTime = new Date(eventTime-time);
  34.  restTime.setSeconds(restTime.getSeconds()+Math.round(restTime.getMilliseconds()/1000)); //on arrondis les secondes afin de ne pas avoir de decalage de temps.
  35.  writeTime("actualTime",time);
  36.  writeTime("restTime",restTime,true);
  37.  writeTime("eventTime",eventTime);
  38.  setTimeout("updateTime()",1000);
  39. }
  40. window.onload=updateTime;
  41. </script>
  42. </head>
  43. <body>
  44. <label>Heure Actuelle : </label><input type="text" id="actualTime"><br>
  45. <label>Temps restant : </label><input type="text" id="restTime"><br>
  46. <label>Prochain &eacute;v&egrave;nement : </label><input type="text" id="eventTime"><br>
  47. </body>
  48. </html>


Message édité par gatsu35 le 16-06-2006 à 09:36:48
Reply

Marsh Posté le 16-06-2006 à 13:31:39    

Je m'attendais plus à une correction de mon script qu'un script tout fait  :D  
 
En tout cas merci, par contre, je ne comprends pas quel est l'interêt d'utiliser le window.onload=updateTime; plutot que le <body onLoad=".....">
 
et pourquoi il faut mettre :
 

Code :
  1. window.onload=updateTime;


et non :
 

Code :
  1. window.onload=updateTime();

Reply

Marsh Posté le 16-06-2006 à 14:48:16    

c'est au choix, soit tu appelles la fonction dans le body onload soit en modifiant le window.onload (ce qui est plus propre).
 
Quand tu me mets pas de guillemets, tu passes entièrement l'objet updateTime dans le window.onload. c'est comme si tu faisais un copier-coller du contenu de updateTime dans window.onload.
Si tu mets des parenthèse ça ne représente rien du tout et ça ne lancera pas la fonction.

Reply

Marsh Posté le 16-06-2006 à 17:54:58    

D'accord merci pour les réponses ( par contre ton script semble déconner au niveau des heures. Si je met un evenement à venir dans la minute, j'ai un compte à rebours de plus de 700heures ^^

Reply

Marsh Posté le 16-06-2006 à 19:39:35    

ouais jvais corriger ça de retour chez moi.
 
C'est parce que lors de la soustraction je récupere un objet Date, et ça le fait pas du tout :(  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed