Erreur compte a rebour [Résolu]

Messages postés
7
Date d'inscription
vendredi 14 mars 2014
Statut
Membre
Dernière intervention
22 avril 2015
-
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 :)
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
26318
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 septembre 2019
314
1
Merci
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.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 136 internautes nous ont dit merci ce mois-ci

srkigane
Messages postés
7
Date d'inscription
vendredi 14 mars 2014
Statut
Membre
Dernière intervention
22 avril 2015
-
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 :/
Commenter la réponse de jordane45
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Statut
Membre
Dernière intervention
22 juin 2017
8
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 136 internautes nous ont dit merci ce mois-ci

srkigane
Messages postés
7
Date d'inscription
vendredi 14 mars 2014
Statut
Membre
Dernière intervention
22 avril 2015
-
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 :/
Commenter la réponse de cgandco
0
Merci
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
Commenter la réponse de cgandco