JeuWeb - Crée ton jeu par navigateur
Problème accélération time() - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème accélération time() (/showthread.php?tid=4221)



Problème accélération time() - xanthius - 11-06-2018

Bonsoir,
je voulais tenter de procéder à une accélération du temps par 7.
Au début ça fonctionnait plus ou moins bien. J'ai cependant voulu savoir si s'en était de même sur le long terme.
d'où la tentative suivante :
Code PHP :
<?php 
$boost
= date('d/m/Y H:i:s', (time() + floor( 700000 * date("s"))));
Donc j'arrive bien jusqu'en 2031 mais subitement il me ramène à la date du jour.
si j'essaye en multipliant par 7
Code PHP :
<?php 
$boost
= date('d/m/Y H:i:s', (time() + floor( 7 * date("s"))));
il avance bien mais arrivé au 30 juillet il repasse au 11 juin. Dès fois il avance sans problème mais arrivé à décembre soit il passe à 2019 soit il revient au 11 juin 2018.
Sauriez vous la cause et comment y remédier ?

Le but est d'accélérer le temps INGAME.


Edit :
il est monté jusqu'au 13/07/31 et après capout..


RE: Problème accélération time() - Xenos - 11-06-2018

Salut,

je ne comprends pas pourquoi date("s")? Cela te renverra le nombre de secondes de l'heure actuelle, et je ne comprends pas trop ce que cela vient faire ici... Il te ramène donc à la date du jour car l'heure actuelle est du type 19:46:00 => date("s") vaut alors "0" et donc, time() + 7*date("s") vaut time()

Dans ton cas, il te faut une "ancre" temporelle, c'est à dire un timestamp T0 (réel) indiquant le moment à partir duquel le "boost" est appliqué. Ensuite, il suffit de faire la différence entre le timestamp actuel et ce T0, de la multiplier par ta vitesse d'avancement du temps, et d'ajouter cet écart à T0 pour trouver la nouvelle date ingame.

Code PHP :
<?php 
$dateIngame
= date('d/m/Y H:i:s', $T0 + (time() - $T0)*7);

Attention: l'ancre T0 devra être réactualisée si tu changes la valeur du multiplicateur temporel un jour (ie: si tu passes de x7 à x10 le 1er Aout, alors le timestamp T0 sera la date du 1er Aout)


RE: Problème accélération time() - xanthius - 11-06-2018

Je pensais (à tord) pouvoir utiliser les secondes pour augmenter ma vitesse ..
Mais après lecture, je me rend compte encore une fois que j'étais bien c**

Dans notre cas,
On peut faire
Code PHP :
<?php 
$date
= strtotime("2018-06-16 00:00:00");
$boost = date('d/m/Y H:i:s', $date + (time() - $date)*7);
?