11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour, j'ai développé a partir de script existant sur le web un chornomètre qui calcule le temps écoulé depuis une date stocké coté serveur et l'heure actuelle en fonction de l'heure du serveur qui s'incrémente.

Mon problème, a environs toutes les 30 secondes, je cumule un retard de 2 secondes. Pourriez-vous me dire à quoi cela peut être dû?


<script type="text/javascript">

//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 maintenant = new Date("jour, mois date année heures:minutes:secondes") 
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
	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'); ?>;

function HeureCheckEJS()
{   
   if (secS >= 59)
    {
        secS = 0;
        if (minS>= 59)
        {
            minS = 0;     
            if (heureS >= 23)
                heureS = 0;
            else
                heureS++;
        }
        else
            minS++;
    }
    else
        secS++;
  
   dateActuServ = new Date(jourS +','+ moisS + ','+ anneeS+ ' '+  heureS + ":" + minS + ":" + secS);
   return dateActuServ;
   
   
}
setTimeout("HeureCheckEJS()", 1000);
</script>

Modifié par L-0sWald (05 Jun 2007 - 18:35)