Calcule de temps

Résolu/Fermé
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 - 14 avril 2009 à 23:09
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 - 15 avril 2009 à 02:06
Bonjour,
Je suis en train de chercher à faire un script de calcule de temps pour un jeu que je développe.
Je m'expliquer.
Supposons que le joueur acquière un moyen de gagner de l'argent virtuel à intervalle régulier.
J'ai fait en sorte que le script enregistre la date et si l'intervalle entre la date actuelle et celle enregistré, il va lui ajouter une valeur correspondant (l'argent).
Pour faire simple:
Il gagne par exemple 100€ par jours.
La date enregistré est le 10/04/2009.
On est le 14/04/2009.
Il gagne donc 4 x 100 = 400€.
Le calcule est fait avec la fonction mktime().
Toutefois, si je met la date sur 14/03/2009, alors que l'écart devrai être de 30 jours, il me trouve 30.9583333333.
Je vous met ici mon code:
<?php

echo'<title>Test - temps</title>

<meta content="text/html; charset=UTF-8" http-equiv="content-type">

<style>

<!--

p{margin:0px;}

-->

</style>';

require('id_connexion.php');

$sql = 'SELECT * FROM temps WHERE id="1"';

$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

$data = mysql_fetch_array($req);

if($data['date'] == date('Y-m-d')){echo'<p>Déjà fait !</p>';}

if($data['date'] == '0000-00-00')

	{$date = date('Y-m-d');

	$sql = 'UPDATE temps SET  date="'.$date.'" WHERE id="1"';

	if(mysql_query($sql)){echo'<p>Date actualisé</p>';}

}

else{

//Définition des date au format année-mois-jour

$date1 = $data['date']; 

$date2 = date('Y-m-d');

 

//Extraction des données

list($annee1, $mois1, $jour1) = explode('-', $date1); 

list($annee2, $mois2, $jour2) = explode('-', $date2);



//Calcul des timestamp

$timestamp1 = mktime(0,0,0,$mois1,$jour1,$annee1); 

$timestamp2 = mktime(0,0,0,$mois2,$jour2,$annee2); 

$ecart = abs($timestamp2 - $timestamp1)/86400; //Affichage du nombre de jour : 27

echo'<p>Ecart: '.$ecart.'</p>';
if($ecart >= '1')

	{
	$valeur = $data['valeur'] + $ecart;

	$sql = 'UPDATE temps SET  valeur="'.$valeur.'" WHERE id="1"';

	if(mysql_query($sql)){echo'<p>Valeur actualisé</p>';}

	$date = date('Y-m-d');

	$sql = 'UPDATE temps SET  date="'.$date.'" WHERE id="1"';

	if(mysql_query($sql)){echo'<p>Date actualisé</p>

	<br/>

	<p>Ok. Valeur = '.$valeur.'</p>';}

}





}


?>


Le script de calcule de temps proviens de la FAQ du site developpez.

Si quelqu'un à une idée à me suggérer pour arranger ça...

2 réponses

bonsoir,

c'est normale si ça compte à partir des secondes...

arrondi avec floor()

https://www.php.net/manual/fr/function.floor.php
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
15 avril 2009 à 02:06
Ouai ça a l'air de fonctionner. Le compte est effectivement fait en seconde et j'avais pas pensé à l'arrondir...

Merci en tout cas.
0