Chrono JS avec heure serveur

cs_basto Messages postés 1 Date d'inscription mercredi 18 février 2004 Statut Membre Dernière intervention 5 juin 2007 - 5 juin 2007 à 17:19
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 6 juin 2007 à 06:23
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

yousfane Messages postés 243 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 21 décembre 2007 2
5 juin 2007 à 20:14
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 juin 2007 à 06:23
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 />
0
Rejoignez-nous