Erreur compte a rebour

Résolu
srkigane Messages postés 7 Date d'inscription vendredi 14 mars 2014 Statut Membre Dernière intervention 22 avril 2015 - Modifié par jordane45 le 22/04/2015 à 01:22
 cgandco - 26 avril 2015 à 09:07
Amis codeur bonjour,
j'ai malheureusement besoin de vous une fois de plus pour une petite précision si vous avez quelques minutes a m'accorder biensur :)

Voila je recherchais un compte a rebours journalier caler sur la même heure chaque jour et impossible de trouver ce genre de code sans y intégré forcement une année, un mois, un jour...
donc, je me suis risquer a télécharger un code qui proposais un compte a rebours avec année / mois / jour / etc... pour essayer de le modifier.

n'étant pas très douer (pas du tout en faite) en codage, j'essaie d'apprendre mais certaines chose m'échappe.

Actuellement je dispose donc de ce code :

<SCRIPT LANGUAGE="JavaScript">

function affiche_compte_rebours()
 {
 calcul_compte_rebours(00,00);
 }
 
function calcul_compte_rebours(heure,min) {
        var date_jour=new Date(heure,min);
 var date_fin=new Date();
 var tps=(date_jour.getTime()-date_fin.getTime())/1000;
 var h=Math.floor(tps / 3600);
 tps=tps % 3600;
 var m=Math.floor(tps/60);
 tps=tps % 60
 var s=Math.floor(tps);
 
       var aff_heures = true;
       var aff_min    = true;
       var aff_sec    = true;

       var txt = "";
       if (aff_heures) {
       var txt = txt +h+" h "; }
       if (aff_min) {
       var txt = txt +m+" min et "; }
       if (aff_sec) {
       var txt = txt +s+" sec"; }

 //date_fin=don_date(date_fin);
        valeur_compte_rebours.innerHTML = txt ;
        setTimeout("calcul_compte_rebours("+heure+","+min+")",1000);
 }

</SCRIPT>


ce code n'est pas de moi je l'ai juste trifouiller pour essayer d'en obtenir ce que je voulais mais au final c'est un échec pour moi.

Est ce que des personnes plus qualifier que moi pourrais me dire ou je me plante car je sèche...
je vous remercie d'avance :)

3 réponses

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
22 avril 2015 à 02:16
Bonjour,

L'objet new Date se manipule ainsi :
Nom_de_l_objet = new Date(année, mois, jour, heures, minutes, secondes)


Si tu veux que ton script fonctionne tous les jours ... à la même heure... il faut que tu initialies les variables année mois jour ... avec la date du jour
<script type="text/javascript">
 function affiche_compte_rebours() {
   calcul_compte_rebours(0,0);
  }

function calcul_compte_rebours(heure,min) {
 var date_fin=new Date();
 var annee = date_fin.getFullYear();
 var mois = date_fin.getMonth();
 var jour = date_fin.getDate();
 var date_jour = new Date(annee , mois, jour, heure, min, 0)

var tps=(date_jour.getTime()-date_fin.getTime())/1000;
 var h=Math.floor(tps / 3600);
 tps=tps % 3600;
 var m=Math.floor(tps/60);
 tps=tps % 60
 var s=Math.floor(tps);
 
       var aff_heures = true;
       var aff_min    = true;
       var aff_sec    = true;

       var txt = "";
       if (aff_heures) {
       var txt = txt +h+" h "; }
       if (aff_min) {
       var txt = txt +m+" min et "; }
       if (aff_sec) {
       var txt = txt +s+" sec"; }


   var valeur_compte_rebours = document.getElementById('id_element_ou_afficher');
   valeur_compte_rebours.innerHTML = txt ;
          setTimeout("calcul_compte_rebours("+heure+","+min+")",1000);
 }

</script>

<!-- exemple de div pour afficher ! -->
<div id="id_element_ou_afficher"></div>




Tu n'oublieras pas de modifier la ligne :
 var valeur_compte_rebours = document.getElementById('id_element_ou_afficher');

Afin de lui indiquer l' ID de la DIV ou de l'élément HTML dans lequel tu veux afficher ton info !



Je n'ai pas testé le code.. donc si tu as des souci :
1 - Utilises le debogueur de ton navigateur ( je te recommande d'installer le plugin FIREBUG pour FireFox et de le lancer ..afin de regarder dans la "console" s'il n'y aurait pas des erreurs de script)

2 - reviens avec le code complet corrigé...(html compris) qu'on puisse tester dans les mêmes conditions que toi.
1
srkigane Messages postés 7 Date d'inscription vendredi 14 mars 2014 Statut Membre Dernière intervention 22 avril 2015
Modifié par kazma le 22/04/2015 à 09:18
Bien le bonjour Jordane :)
merci de voler a mon secoure une fois encore ^^

Alors voila,
ce coup ci le script fonctionne j'ai ajouter ligne par ligne et fait les modification progressivement avec ce que tu m'a mentionner pour voir l'évolution de "la chose" et je pensse avoir aboutie sur quelques chose .

<SCRIPT LANGUAGE="JavaScript">

function affiche_compte_rebours() {
 calcul_compte_rebours(2015,04,22,02,55);
 }
 
function calcul_compte_rebours(annee,mois,jour,heure,min) {
    var date_jour=new Date(annee,mois,jour,heure,min, 0);
 var date_fin=new Date();
 var annee = date_fin.getFullYear();
 var mois = date_fin.getMonth();
 var jour = date_fin.getDate();
 
 var tps=(date_jour.getTime()-date_fin.getTime())/1000;
 var h=Math.floor(tps / 3600);
 tps=tps % 3600;
 var m=Math.floor(tps/60);
 tps=tps % 60
 var s=Math.floor(tps);
 
       var aff_heures = true;
       var aff_min    = true;
       var aff_sec    = true;

       var txt = "";
       if (aff_heures) {
       var txt = txt +h+" h "; }
       if (aff_min) {
       var txt = txt +m+" min et "; }
       if (aff_sec) {
       var txt = txt +s+" sec"; }

    var valeur_compte_rebours = document.getElementById('valeur_compte_rebours');
        valeur_compte_rebours.innerHTML = txt ;
        setTimeout("calcul_compte_rebours("+annee+","+mois+","+jour+","+heure+","+min+")",1000);
 }

</SCRIPT>

</head>
<body onload="affiche_compte_rebours();">
<!-- date -->
<div id="Html1" style="position:absolute;left:0px;top:0px;width:489px;height:44px;z-index:0">
<div  id ="valeur_compte_rebours" style="margin:0;padding:0;text-align:center;color:#0076AE;font-family:'Arial Black';font-size:15px;">

</div>


</div>


Donc le décompte se fait correctement, par contre je n'ai pas saisi pour ce que tu ma dit :

"Si tu veux que ton script fonctionne tous les jours ... à la même heure... il faut que tu initialise les variables année mois jour ... avec la date du jour "

Car en effet une fois le décompte terminer il affiche du négatif et ne repart pas sur un nouveau cycle :/
Je doit modifier ces variables ci?

 var date_fin=new Date();
var annee = date_fin.getFullYear();
var mois = date_fin.getMonth();
var jour = date_fin.getDate();


Car quand je modifie ces lignes, le compteur continue de défiler dans le négatif :/
0
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9
22 avril 2015 à 14:18
Bonjour,

pour ne pas avoir de valeur négative, tu dois simplement tester si Date_jour < date_fin et dans ce cas forcer txt à "0 h 0 min 0 sec"

bonne journée
1
srkigane Messages postés 7 Date d'inscription vendredi 14 mars 2014 Statut Membre Dernière intervention 22 avril 2015
22 avril 2015 à 15:50
Bien le bonjour cgandco :)
Avants tout, je te remercie de participer a la résolution de mon problème.

Malheureusement sa ne fait pas faire une boucle au script mais sa le fige à "0 h 0 min 0 sec" de cette façon :/
0
Bonjour,

J'ai réécris le code a ma façon, avec setInterval c'est plus simple a mon avis.

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>cgandco</title>
    <script type="text/javascript">
        function afficheCompteRebours(idElement, annee, mois, jour, heure, min)
        {
            var dateEnd = new Date(annee, mois - 1, jour, heure, min, 0);      //date cible, en javascript le mois de janvier = 0
            var compteRebours = document.getElementById(idElement);    //on recherche une seule fois dans le DOM

            var theTimer = setInterval(function ()
            {
                var dateNow = new Date();
                var ecart = (dateEnd - dateNow) / 1000; //nombre de seconde entre les deux dates 
                var j = Math.floor(ecart / (24 * 60 * 60));
                ecart = ecart % (24 * 60 * 60);
                var h = Math.floor(ecart / (60 * 60));
                ecart = ecart % (60 * 60);
                var m = Math.floor(ecart / 60);
                ecart = ecart % 60;
                var s = Math.floor(ecart);

                var txt = "";
                if (j > 0)
                {
                    txt = j + " j ";
                }
                if (h > 0)
                {
                    txt = txt + h + " h ";
                }
                if (m > 0)
                {
                    txt = txt + m + " min et ";
                }
                txt = txt + s + " sec";

                if (dateNow >= dateEnd) //si on est plus tard que date cible
                {
                    compteRebours.innerHTML = "On y est !!!";
                    clearInterval(theTimer);
                }
                else
                {
                    compteRebours.innerHTML = txt;
                }
            }, 1000);
        }
    </script>

</head>
<body onload="afficheCompteRebours('valeur_compte_rebours',2015, 4, 26, 09, 1);">
    <!-- date -->
    <div id="Html1" style="position: absolute; left: 0px; top: 0px; width: 489px; height: 44px; z-index: 0">
        <div id="valeur_compte_rebours" style="margin: 0; padding: 0; text-align: center; color: #0076AE; font-family: 'Arial Black'; font-size: 15px;">
        </div>


    </div>
</body>
</html>



bonne journée
0
Rejoignez-nous