Decalage date/heure serveur et marchine [Résolu]

Signaler
Messages postés
186
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
-
Messages postés
186
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
-
Bonjour

j'ai trouvé un petit script sympas de compte a rebourg ici mais je bloque sur l'écart entre l'heure serveur et l'heure de la machine, en effet c'est des annonces aux enchère, j'affiche le temps restant donc avec ce scrip, sauf que le script se base sur l'heure machine mais que je selectionne les annonces actives en php, donc sur la base de l'heure du serveur et j'ai un décalage d'envrion 8 minutes. Alors le soucis c'es qu'un annonce affiche un delais restant de 9mn et si je rafraichie la page ellle disparait car mon script php la concidere passée en délais vu le décalage.
Je voudrais donc que le script prenne la base de l'heure serveur pour démarrer le compte a rebourg (quitte a avoir un decalage de quelques  minutes avec la machine, le tout étant d'être cohérent entre le temps affiché restant et le tri fait par le script.

j'ai essayé de definir date1 en php avec le meme format que date2, ça calcul mais ne defile plus le compte a rebourg !!!!
je vous mets le script si vous avez une solution se serait sympas

 <script type="text/JavaScript">
     
    
     
     function Rebour_<?php echo $auction->id; ?>() {
     var Affiche=document.getElementById("Compte_<?php echo $auction->id; ?>");
     var date1 = new Date (); // c'est la que je bloque
     
     var date2 = new Date ("<?php echo $compte_date; ?>");
// Date et heure de fin d'enchere, info prise dans la bdd et formatée via php : m d H:i:s Y (ex : 05 31 12:00:00 2009)
     var sec = (date2 - date1) / 1000;
     var n = 24 * 3600;
     if (sec > 0) {
     j = Math.floor (sec / n);
     h = Math.floor ((sec - (j * n)) / 3600);
     mn = Math.floor ((sec - ((j * n + h * 3600))) / 60);
     sec = Math.floor (sec - ((j * n + h * 3600 + mn * 60)));
     Affiche.innerHTML = "" + j +" J "+ h +" h "+ mn +" m "+ sec + " s ";
   
     }
     else if (Math.abs(sec) < (3 * n)) {
     Affiche.innerHTML = "<?php echo JText::_( 'Enchere termin&eacute;e'); ?>";
     }
     
     tRebour_<?php echo $auction->id; ?>=setTimeout ("Rebour_<?php echo $auction->id; ?>();", 1000);
     }
     Rebour_<?php echo $auction->id; ?>();
   
     </script>

Merci

Laubro

6 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
Bonjour,

pas tout suivi ton explications, mais
le décalage serveur/micro est quasi obligatoire,
"il suffit" d'en tenir compte

ch'tiot exemple qui affiche 

    <label id="afflbl"></label>
    <script>
        var lab=document.getElementById("afflbl");
        var ds=new Date("<?php echo date("F j, Y, g:i a");?>");
           //ça c'est la date du serveur
        var dm=new Date();                                      
           //ça c'est date du micro
        var diff=ds-dm;                                         
           //ça c'est la différence
        appel();
    function appel()
    { lab.innerHTML=new Date(Date.parse(new Date())+diff);       
           // date heure rectifiée
      setTimeout(appel,1000);
    }
    </script>

Cordialement [mon Site] [M'écrire] Bul
Messages postés
186
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
9 juillet 2013

Salut

en fait ton code m'as permis de trouver l'heure serveur et j'ai donc adapté l'ensemble. Par contre, autant cela fonctionne impec sous FF autant sous IE et safari cela ne renvoi pas dans mon label, pourtant j'ai testé dans un alert(); et cela afiche bien dedans mais pas dans mon label, si vous avez une idée du pourquoi/comment ?

<label id="Compte_<?php echo $auction->id; ?>" class="time">123</label>

      <script type="text/JavaScript">
        var lab=document.getElementById('afflbl');
       
       
        var ds=new Date('<?php echo date("F j, Y, g:i a");?>');
           //ça c'est la date du serveur
        var dm=new Date();                                     
           //ça c'est date du micro
        var diff=ds-dm;                                        
           //ça c'est la différence
        appel();
    function appel()
    {
    lab.value=new Date(Date.parse(new Date())+diff);
   
         
           // date heure rectifiée
      setTimeout(appel,1000);
    }
    </script>
  
   
 
     <script type="text/JavaScript">
     
     
     function Rebour_<?php echo $auction->id; ?>() {
     
     var Affiche=document.getElementById('Compte_<?php echo $auction->id; ?>');
     
     var test = document.getElementById('afflbl').value;
     
     var date1 = new Date (test);
   
     var date2 = new Date ('<?php echo $compte_date; ?>'); // Date et heure de l'événement
     
   
         
     var sec = (date2 - date1) / 1000; // Temps donné en millièmes de seconde
   
     var n = 24 * 3600; //nombre de secondes dans un jour
     if (sec > 0) {
     j = Math.floor (sec / n);
     h = Math.floor ((sec - (j * n)) / 3600);
     mn = Math.floor ((sec - ((j * n + h * 3600))) / 60);
     sec = Math.floor (sec - ((j * n + h * 3600 + mn * 60)));
     Affiche.innerHTML = '' + j +' J '+ h +' h '+ mn +' m '+ sec + ' s ';
   
     }
     else if (Math.abs(sec) < (3 * n)) { // Durée de l'événement
     Affiche.innerHTML = "<?php echo JText::_( 'Enchere terminee'); ?>";
     }
     
     tRebour_<?php echo $auction->id; ?>=setTimeout ('Rebour_<?php echo $auction->id; ?>();', 1000);
     }
     Rebour_<?php echo $auction->id; ?>();
   
     </script>

Merci

Laubro
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
Bonjour,


function appel()
    {   lab.value=new Date(Date.parse(new Date())+diff); ....
or
donc, tu n'affiches rien

quand à ta fonction function Rebour_<?php echo $auction->id; ?>() {
???? pourquoi un nom généré par le php ? je ne comprned pas
de toute manière, il nous  faudrait la page générée ! pas le php,
car comment on devine $auction->id ???

Cordialement [mon Site] [M'écrire] Bul
Messages postés
186
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
9 juillet 2013

en fait il y a plusieurs produits aux encheres sur la pages, donc je recupere l'id de l'enchere dans la bdd avec le php et je nomme ensuite avec cet identifiant pour bien les différentier les unes des autres, que les information utilisée correspondent......
apparament ça vient d'un soucis de formatage de date2 récupérée en php dans la bdd aussi, donc je suis en rain de tester différents format...
Messages postés
186
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
9 juillet 2013

Laubro

apparament c'était bien un probleme de formatage de la date2, je passai par un script joomla mais cela mettait au format français "Juin" au lieu de June par exemple, donc je viens de le codé avec mktime et bingo sous safari ça marche reste plus qu'a tester sous IE (le temps que mon super vista veuille bien s'allumer....)
merci de ton aide
Messages postés
186
Date d'inscription
jeudi 23 décembre 2004
Statut
Membre
Dernière intervention
9 juillet 2013