Une variable qui se vide en 48 heures

Résolu/Fermé
big-boss-taha Messages postés 6 Date d'inscription mercredi 4 septembre 2013 Statut Membre Dernière intervention 11 octobre 2013 - 8 oct. 2013 à 18:47
big-boss-taha Messages postés 6 Date d'inscription mercredi 4 septembre 2013 Statut Membre Dernière intervention 11 octobre 2013 - 11 oct. 2013 à 21:35
Bonjour,

Alors voila, j'ai une variable dont ça valeur est 100 et se nomme "vie"

Je veux que cette variable se vide petite à petit jusqu'à 0 en 48 heures !

D'abord voici se que je voulais faire ;

$vie = $donnees['sante'];

$date = $donnees['date_vie'];


$date = new DateTime('2012-09-01 12:00:00');

$dateNow = new \DateTime('now');


$interval = $date->diff($dateNow);

$interval = $interval->format('s');


$interval/1728;

$vie = -1 / $interval;



Que dois-je aouté de plus pour faire perdre -1 de vie ! Parce que se code de marche pas !

Merci à vous !

4 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 9/10/2013 à 11:34
Salut,

La réponse t'as déjà été donné sur un autre forum ;)

Je répète donc la solution proposé par Genova :

Tu commence par déterminer combien de vie perdue pour 1 seconde :

$tempsMax = 48 * 3600; // 48 heures en secondes
$vieParSeconde = 100 / $tempsMax; // Tu divises ta vie (100) par 48h (en secondes) afin de savoir combien de vie disparait par seconde

Lors de la prochaine connexion, tu regardes combien de différence en seconde il y a entre le moment présent et la dernière date d'enregistrement, puis tu multiplies ce nombre de secondes par le cout de vie par seconde :


$dernierTemps = ...; // Ici tu dois récupérer la dernière date de mise à jour
$tempsActuel = time(); // Moment actuel
$tempsEcoule = $tempsActuel - $dernierTemps; // Nombre de secondes écoulées depuis la dernière mise à jour
$viePerdue = $vieParSeconde * $tempsEcoule;
$vie = $vie - $viePerdue;

Bonne journée
1
big-boss-taha Messages postés 6 Date d'inscription mercredi 4 septembre 2013 Statut Membre Dernière intervention 11 octobre 2013
Modifié par big-boss-taha le 11/10/2013 à 16:23
Ouais mddr, j'ai pensé ne jamais avoir la réponse sur l'autre forum !

Bon, euuuh je sais maintenant comment faire mais j'ai eu certains problèmes !

Je pense que je suis tout prés du but, d'abord voici le code que j'utilise :


$date = new DateTime('2012-09-01 12:00:00');
$dateNow = new \DateTime('now');
$interval = $date->diff($dateNow);
$interval = $interval->format('%s seconds');
$interval/1728;
$vie = $vie - $interval/1728;

print "<br>vie: $vie <br>";
print "<br>interval: $interval <br>";

Le résultat :

vie: 99.970486111111

interval: 51 seconds

Puis la vie commence à se vider petite à petit ! Mais quand le temps et à 60 secondes, puis reviens à 0, la vie reviens à 100 aussi et redescend petite à petit !! Ainsi de suite !

Aussi, si j'utilise :
<?php
{
echo "".$donnees['sante']."";
}
?>

Pour afficher la variable au membre, ça reste 100 même si en print "<br>vie: $vie <br>"; deviens 99 ou moins ! Même aussi sur la bd ça change pas :'(

Merci d'avance !
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
11 oct. 2013 à 17:09
Tu pensais ne jamais avoir la réponse mais as tu vérifié ??

Tu as encore eu une réponse ce matin concernant ce deuxième message :
tu dois enregistrer la date initiale dans un fichier ou en base de données.

Premièrement la 5ème ligne de ton code ne sert à rien :
$interval/1728; 
Tu ne récupère pas le résultat de ton opération, tu peux donc supprimer cette ligne.

Le calcul de ton intervalle n'est pas correct, voici un exemple de correction :

$vie = 100;

$date = new DateTime('2012-09-01 12:00:00');
$dateNow = new DateTime('now');
$interval = $dateNow->getTimestamp() - $date->getTimestamp();
$vie = $vie - $interval/1728;

print "<br>vie: $vie <br>";
print "<br>interval: $interval <br>";


On arrive donc à environ -20 000 point de vie à l'heure actuelle, c'est normal puisque le délais de 48h est largement dépassé (2012-09-01, soit plus d'un an).

Ici la date initiale (2012-09-01) est codé en dur. Comme il t'a été répondu sur l'autre forum, il faudrait définir cette date en fonction de la première connexion du visiteur et l'enregistrer dans un fichier ou en base de données.

Bonne journée
0
big-boss-taha Messages postés 6 Date d'inscription mercredi 4 septembre 2013 Statut Membre Dernière intervention 11 octobre 2013
11 oct. 2013 à 21:35
Je te remercie, ton code marche à merveille, j'avais pas trop compris se qu'il voulais dire sur l'autre forum, merci du fond du coeur ;)
0