Chrono JS avec heure serveur

Signaler
Messages postés
1
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
5 juin 2007
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Bonjour, j'ai fait un amalgame de script pour obtenir un chronometre qui affiche la différence de temps écoulé depuis une date php antérieur et la date actuelle du serveur. Le script marche très bien, le seul problème est que plus le temps passe, plus le compteur cumule du retard. Un délais de 2 secondes toutes les 30 secondes environs.

voici le monstre :
<script type="text/javascript">

    <?
        $debut = explode(" ", $infoTache["DebutTravail"]);
        $nbJours = explode("-", $debut[0]);
        $HMS = explode(":", $debut[1]);
    ?>
//va chercher l'heure du debut tâche
var maintenant =  new Date ("<?echo $nbJours[2].", ".$nbJours[1].", ".$nbJours[0]."  ".$HMS[0].":".$HMS[1].":".$HMS[2];?>");
var Start = maintenant.getTime();

function affiche_heure() {
var secondes_abs = Math.abs(Math.round(calcul_temps()));
var secondes_rel = secondes_abs % 60;
var minutes_abs = Math.abs(Math.round((secondes_abs-30)/60));

var nombre_secondes ="" + ((secondes_rel > 9) ? secondes_rel : "0" + secondes_rel);
var nombre_minutes ="" + ((minutes_abs > 9) ? minutes_abs : "0" + minutes_abs);

 document.affD.ejs_heure.value=  nombre_minutes + ":" + nombre_secondes;

window.setTimeout('affiche_heure()',1000);

}
window.onload = affiche_heure;
function calcul_temps() {

//encore et tjrs est la var du temps réel qui se rafraichit   
var encore_toujours = HeureCheckEJS();
return((encore_toujours.getTime()- Start)/1000);
}
//détermination de l'heure du serveur au moment de l'affichage
    var jourS = <?php echo date('j'); ?>;
    var  moisS = <?php echo date('n'); ?>;
    var anneeS = <?php echo date('Y'); ?>;
    var heureS = <?php echo date('H'); ?>;
    var  minS = <?php echo date('i'); ?>;
    var secS = <?php echo date('s'); ?>;
 
 //incrémente l'heure actuel a partir de l'heure obtenu du serveur
 function HeureCheckEJS()
   {  
   if (secS >= 59)
    {
        secS = 0;
        if (minS>= 59)
        {
            minS = 0;    
            if (heureS >= 23)
                heureS = 0;
            else
                heureS++;
        }
        else
            minS++;
    }
    else
        secS++;
 
   DinaHeure = new Date(jourS +','+ moisS + ','+ anneeS+ ' '+  heureS + ":" + minS + ":" + secS);
   which = DinaHeure
   return DinaHeure
  
   setTimeout("HeureCheckEJS()", 1000)
   }
</script>

Pouvez-vous me dire à quoi cela est du?
merci

2 réponses

Messages postés
246
Date d'inscription
vendredi 24 novembre 2006
Statut
Membre
Dernière intervention
21 décembre 2007
1
Salut
le processus a besoin d'un petit temps pour faire toutes ces calculs et je pense que c'est ça qui cause ce problème
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
Bonjour,

  setTimeout("HeureCheckEJS()", 1000)
  ça ne va pas déclencher toutes les secondes au 100è près déjà !
    ( je n'ai pas regardé le reste )
  il faut utiliser l'heure du micro et non pas incrémenter des compteurs.
 

<hr />
Cordialement                Bul     [mon Site]     [M'écrire]
<hr />