Page 1 sur 1
Calcul de temps avec mktime et Unix_timestamp
Posté : 26 mai 2009, 15:05
par khalad
Bonjour....
j'aimerais calculer une différence de temps entre une date enregistré en format timestamp dans une table INT avec la date actuel... ce résultat me permet de savoir en combien de temps j'ai développé un nombre X de ressources.
voila, alors bon, je tâtonne, je suis la pour apprendre, ce sont des petits exercices que je me fixe pour apprendre.
je tire donc avec un SELECT le résultat de ma dernière connexion que je soustrait au temps actuel :
$essai=(mktime(date(timestamp)) - $time['usine_last']);
voila, c'est la seul partie en gros qui me bloque... je n'arrive pas a calculer ces dates.
Pouvez vous m'aider ?
PS : 20090526144830 voici la date en format timestamp dans la base mise a jour par NOW() dans l'UPDATE
Posté : 26 mai 2009, 15:19
par Sékiltoyai
Le timestamp utilisé par PHP est le timestamp UNIX (il est désigné par UNIX_TIMESTAMP dans mysql). C'est le nombre de secondes depuis le 1er janvier 1970.
Le timestamp mysql est sous le format YYYYMMJJHHMMSS : Année, Mois, Jour, Heures, Minutes, Secondes.
Tu comprendras que les deux ne sont pas compatibles. Je t'invite à poursuivre ta recherche dans les fonctions de
date/heure de PHP pour le générer.
Posté : 26 mai 2009, 15:27
par khalad
d'accord...
ca fait un moment que je parcours les explications sur les dates, mais je bug encore un peu ... c'est pour ca que je viens demander conseils.
J'aimerais savoir la meilleur manière de calculer ces dates. J'ai lu que le mieux était de calculer sur les timestamp d'unix dans les requêtes MySql mais je ne sais pas comment afficher la date actuelle au format timestamp...
Faut t'il que j'utilise la fonction mktime() ? ou date() ? ou time() ?
... j'avoue être un peu perdu...
EDIT :
et si, a l'insertion de la date actuel dans la base de donnée, je met la date avec mktime() que je soustrait a la date actuel avec mktime() également, ca devrait marcher non ?
Posté : 27 mai 2009, 01:08
par Sékiltoyai
Non, mais déjà si tu expliquais ton problème exact, c'est à dire quelles sont les données, et qu'est ce que tu veux en faire, ce serait plus simple quand même… Parce que là c'est incompréhensible. :-/
Posté : 27 mai 2009, 07:47
par blof
Bonjour,
côté MySQL :
si tu veux mettre un "timestamp UNIX" dans un champ, il faut que ce champ soit de type "INT" ( et pas "TIMESTAMP" )
et lors de l'update, il faut utiliser UNIX_TIMESTAMP() ( et pas NOW() ) pour la date actuelle.
http://dev.mysql.com/doc/refman/5.0/fr/
côté PHP :
c'est time() qu'il faut utiliser.
http://www.php.net/manual/fr/
ça c'est fait ...
j'aimerais calculer une différence de temps entre une date enregistré en format timestamp dans une table INT avec la date actuel...
en reprenant dans ton exemple les noms des variables :
$essai = time() - $time['usine_last'];
... et c'est en secondes
Posté : 27 mai 2009, 10:16
par khalad
Désolé de mes explications obscurs,
En fait, je cherche a développer un système de gestion de ressources, un peu ce que l'on retrouve dans les jeux par navigateurs. J'avais trouvé un tutoriel qui proposait une méthode exclusivement MySql et PHP avec des calculs directement dans le Sql avec UNIX_TIMESTAMP.
Mais bon, j'ai pas vraiment réussi a le faire marcher, j'ai donc essayé de comprendre par moi meme comment l'on faisait, et j'ai essayé plusieurs choses, sauf que je butais sur le calcul du temps entre la dernière connexion et le moment ou il se reconnectait (ou rafraîchissait la page).
La méthode en gros c'est calculer temps_actuel - last_time = somme, que l'on multiplie a la quantité de ressources divisé en 3600 secondes. En gros, je pense que la théorie c'est ca, mais je bute un peu sur la pratique
EDIT :
J'ai réussi, merci pour les explications de blof ! Ca m'a débloqué, merci !