Compte a rebour finissant a 0

Poinball9
Invité n'ayant pas de compte PHPfrance

22 janv. 2010, 02:58

Bonjour ,

j'ai un compte a rebour fait en JAVASCRIPT sur mon site web.

Le voici :
<head>
<script language="JavaScript">
// la date à partir de laquelle on compte
var cible = new Date("<? echo " $thurium_lvl1_timer "; ?>");

// nombre de millisecondes par jour, heure, minute et seconde
var mms_jour = 24 * 60 * 60 * 1000;
var mms_heure = 60 * 60 * 1000;
var mms_minute = 60 * 1000;
var mms_seconde = 1000;

function decompte() {

// la date courante
var aujourdhui = new Date();

// on crée les variables qui accueilleront les différences entre aujourd'hui et la date à atteindre
var change_j = -1;
var change_h = -1;
var change_m = -1;

// le total de millisecondes de différences
var diff_mms = cible.getTime() - aujourdhui.getTime();

// pareil pour les jours
diff_jours = Math.floor(diff_mms / mms_jour);
diff_mms -= diff_jours * mms_jour;

// pour les heures
diff_heures = Math.floor(diff_mms / mms_heure);
diff_mms -= diff_heures * mms_heure;

// les... minutes, bravo ;-)
diff_minutes = Math.floor(diff_mms / mms_minute);
diff_mms -= diff_minutes * mms_minute;

// les secondes, ce qui reste en fait.
var diff_secondes = Math.floor(diff_mms / mms_seconde);


// on affecte nos résultats aux champs du formulaire
document.getElementById("jours").innerHTML = diff_jours;
document.getElementById("heures").innerHTML  = diff_heures;
document.getElementById("minutes").innerHTML  = diff_minutes;
document.getElementById("secondes").innerHTML = diff_secondes;


// on relance la fonction pour actualiser à la seconde
setTimeout("decompte()",1000);
}
</script> 
</head>


<form name="formulaire"><font face="arial" size="4"><b>
Upgrade lvl $thurium_lvl1 dans :
<span id="jours">0</span> jours 
<span id="heures">0</span> heures
<span id="minutes">0</span> minutes
<span id="secondes">0</span> secondes
</form>

Quand j'active un bouton , j'ai fait un script PHP qui entre dans une table sql la date et lheure du server + 5 minutes ... ce qui fais que le compte a rebour prend cette valeur pour faire un décompte de 5 minute jusqua la date exacte réel.
Mais le probleme est quand que compteur est rendu a 0 il continue dans une valeur négative et continue toujours... mais j'aimerais qu'il arrete a 0 et qu'il refrest la page ..
c'est possible ?


Merci pour votre temps !!

Poinball9
Invité n'ayant pas de compte PHPfrance

22 janv. 2010, 06:38

j'ai Reglé mon probleme :P Merci quand meme !!

MAIS j'ai une autre question.

Psésentement le timer est en fonction de la date et lheure de la machine du visiteur et non de la date et lheure du server ... !!!
Puis-je mettre le code de date et heure en fonction du server ???

Merci !

ViPHP
AB
ViPHP | 5818 Messages

22 janv. 2010, 12:31

Etant donné que tu utilises getTime() dans ta fonction javascript pour ton compte à rebour, ça devrait pas pouvoir le faire.

Par contre tu pourrais faire l'inverse : récupérer l'heure du client avec la fonction javascript getTime() puis la transmettre dans une variable $_GET php et reloader le script pour enregistrer cette variable visiteur dans ta bdd, ainsi le script serait cohérent.

A priori je vois pas d'autre solution, à moins que je n'ai pas saisi ton pb.

Poinball9
Invité n'ayant pas de compte PHPfrance

22 janv. 2010, 16:28

Non...

j'ai lheure de mon server avec 5 minute dajouter et cette heure la est sauvegarder dans une db pour que mon compte a rebour fasse de 5 minute jusqua 0 ...

Le probleme est que si le visiteur samuse a changer lheure de son ordinateur pendant que le compteur tourne, il pourrais s'évité dattendre le 5 min !!! alors je voudrais que lheure que le compte a rebour regarde pour savoir ou il est rendu sois lheure du Server et non celle de lordinateur du visiteur ...

il a surment une solution ..
:S

ViPHP
AB
ViPHP | 5818 Messages

22 janv. 2010, 16:50

Ah ok je savais pas exactement ce que tu voulais faire.

Mais si ton décompte dépend de javascript et qu'on désactive javascript, c'est prévu dans ton code ?

Pour le reste je vois pas bien comment faire avec ta fonction JS puisque même si tu transmet l'heure du serveur au bon format dans ta variable $thurium_lvl1_timer, ce qui est faisable, le décompte se fait par getTime qui elle se base sur sur l'heure de l'ordinateur :-k

Poinball9
Invité n'ayant pas de compte PHPfrance

22 janv. 2010, 17:05

c'est possible de changer GetTime pour une autre fonction qui se baserais sur lheure du server ?

ViPHP
AB
ViPHP | 5818 Messages

22 janv. 2010, 19:26

Ben non, c'est bien le problème, c'est pas possible avec javascript sauf à utiliser ajax.
Mais faudrait éviter de faire une requête chaque seconde par exemple durant toute la durée du script (5min) et tout ça pour chaque visiteur.