Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/11/2007, 02h03   #1
Invité régulier
 
Inscription : novembre 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 50
Points : 9
Points : 9
Par défaut [SQL] Comparaison heure PHP et heure SQL

Bonjour

Voila je m'explique je stoque une date et heure dans une base de donnée mysql (type de donnée timestamp) et dans une page je voudrais calculer le temps ecouler entre l'heure stoqué dans la base de donnée et l'heure actuel. Mais le probleme c'est que quand je recupere l'heure de la base de donnée j'ai une chaine de caractere ... comment je peux faire svp ?
mello est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 04h29   #2
Membre confirmé
 
Avatar de Mogwaï
 
Inscription : mai 2004
Messages : 247
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2004
Messages : 247
Points : 243
Points : 243
Envoyer un message via MSN à Mogwaï
Essaie quelque chose du genre

Code :
1
2
 
SELECT DATEDIFF(NOW(), `tonchampdatetime`) FROM `tatable` where ...
De plus amples informations ici :
http://dev.mysql.com/doc/refman/5.0/...functions.html
__________________
Etre à son compte, y'a rien de mieux !
Mogwaï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 10h47   #3
Invité régulier
 
Inscription : novembre 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 50
Points : 9
Points : 9
Je n'arrive pas a utiliser sa dans mon script php :s

voila mon code mais j'immagine que pour utliser ce genre de fonction il ne faut pas faire comme sa ...
Code :
1
2
3
$aaa=mysql_query("SELECT DATEDIFF(NOW(), `date`)  FROM `personnage` where perso='$nomperso'");
 
echo "diff = $aaa";
mello est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 10h53   #4
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
mysql_query renvoit un résultat de requête, en aucun cas un enregistrement de la base.
Il te manque donc une étape :

Code :
1
2
3
4
5
 
$result=mysql_query("SELECT DATEDIFF(NOW(), `date`) as ecart_date  FROM `personnage` where perso='$nomperso'");
 
$aaa = mysql_fetch_array($result);
echo "diff = ".$aaa['ecart_date'];
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 11h05   #5
Invité régulier
 
Inscription : novembre 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 50
Points : 9
Points : 9
la requete sql marche pas ....

ma table s'appelle "personnage"
dans personnage il y a une ligne "maj" qui est de type timestamp
Mon but est de voir combien de temps s'est ecouler depuis l'heure stocker dans "maj"


Code :
1
2
3
4
$result=mysql_query("SELECT DATEDIFF(NOW(), maj) as ecart_date  FROM `personnage` where perso='$nomperso'")or die("ERREUR");
 
$aaa = mysql_fetch_array($result);
echo "diff = ".$aaa['ecart_date'];
ce code m'afficher ERREUR la requete ne marche pas :s
mello est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 11h35   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Code :
1
2
$result=mysql_query("SELECT UNIX_TIMESTAMP - maj as ecart_date  FROM `personnage` where perso='" . mysql_real_escape_string($nomperso) . "'") or die("ERREUR");
echo mysql_result($result, 0, 0);
Ne serait-ce pas suffisant ?

Citation:
Envoyé par mello
Mais le probleme c'est que quand je recupere l'heure de la base de donnée j'ai une chaine de caractere ...
Une chaîne de caractères ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 11h50   #7
Membre éclairé
 
Avatar de Linio
 
Inscription : octobre 2005
Messages : 427
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 427
Points : 304
Points : 304
Oui c'est ce qu'on récupère en php quand on fait une requête Mysql sur les champs date ou heure. (Bien chiant d'ailleurs)
__________________
Linio
Linio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 15h13   #8
Membre éclairé
 
Inscription : janvier 2007
Messages : 349
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 349
Points : 320
Points : 320
julp, j'utilise le code que tu proposes:

Code :
$result=mysql_query("SELECT CURRENT_TIMESTAMP - date_connexion as duree_connexion ...
J'affiche le résultat et j'obtiens un phénomène bizarre:

tant que CURRENT_TIMESTAMP et date_connexion sont dans la même minute, cela fonctionne. Quand CURRENT_TIMESTAMP change de minute, l'écart fait un saut inexpliqué (d'une quarantaine de secondes).

J'utilise EasyPhp 1.8 pour mes tests. Est-ce un bug lié à cette version ?

Sinon, comment calculer l'écart entre un champ mysql TIMESTAMP récupéré dans une variable $date_connexion et une date PHP récupérée par date() par exemple ?
josse95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 15h35   #9
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par josse95
tant que CURRENT_TIMESTAMP et date_connexion sont dans la même minute, cela fonctionne. Quand CURRENT_TIMESTAMP change de minute, l'écart fait un saut inexpliqué (d'une quarantaine de secondes).
Comment ça ? Il n'y normalement aucune différence entre les deux tant que les serveurs sont sur la même machine (à moins d'un mécanisme de synchronisation) mis à part le temps de traitement du code PHP et d'exécution de la requête puisque vous dites utiliser la fonction date() (c'est bien un timestamp que vous demandez ?). En effet, la "fonction" CURRENT_TIMESTAMP ne sera substituée par sa valeur qu'à l'exécution de la requête par MySQL. Mais 40 secondes d'écart c'est beaucoup quand même !
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 16h58   #10
Membre éclairé
 
Inscription : janvier 2007
Messages : 349
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 349
Points : 320
Points : 320
Oui, effectivement, c'est beaucoup et je ne comprends pas.
date_connexion est le champ de ma base MySQL initialisé lors de la connexion.

Je fais le select CURRENT_TIMESTAMP-date_connexion à intervalles plus ou moins réguliers (j'utilise le bouton rafraîchir du navigateur. Mon but est de mettre en place une durée maximum de session). L'écart augmente de quelques secondes à chaque fois puis augmente brusquement d'une quarantaine de secondes lorsque l'horloge du PC passe à la minute suivante (j'affiche l'horloge en parallèle).

Pour l'instant, j'hésite à migrer sous EasyPhp 2 (c'est une version bêta et je sens que je risque de passer du temps à faire la migration ...).

C'est la raison pour laquelle je souhaite, comme mello dans son message initial, utiliser directement le champ MySQL avec les fonctions Php de traitement de date. Y a t'il un moyen simple pour le faire ?
josse95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 17h17   #11
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
slt...

Pour savoir l´ecart entre 2 dates

Code :
1
2
 
select timediff(CURRENT_TIMESTAMP ,date_connexion) as duree_connexion ....

et quand a date_connexion.. c´est quoi au juste?
la date de quand tu fais la connexion? mais quand est ce que tu l´enregistre?
parce que si tu l´enregistre au debut, biensur que a chaque fois, l´ecart augmente.
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 17h28   #12
Membre éclairé
 
Inscription : janvier 2007
Messages : 349
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 349
Points : 320
Points : 320
Merci, je vais essayer.

Bien-sûr qu'il est normal que l'écart augmente. Mais là, il augmente linéairement avec le temps (normal) sauf quand il y a un changement de minute où là il y a une discontinuité. Au lieu d'augmenter de quelques secondes (intervalle entre deux rafraichissements), il augmente brusquement de 40 secondes.

Entre-temps, j'ai fait ceci:

Code :
duree_connexion = time()-strtotime($result['date_connexion']);
et je n'ai plus le problème que j'avais avec le select(CURRENT_TIME_STAMP-date_connexion ...).
josse95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 17h33   #13
Membre actif
 
Avatar de fenkys
 
Inscription : octobre 2007
Messages : 157
Détails du profil
Informations personnelles :
Âge : 45

Informations forums :
Inscription : octobre 2007
Messages : 157
Points : 181
Points : 181
Julp, tu as confondu UNIX_TIMESTAMP et CURRENT_TIMESTAMP

UNIX_TIMESTAMP renvoie un timestamp facon Unix c'est a dire un nombre de seconde écoulé depuis une certaine date (1-1-1970 je crois).

CURRENT_TIMESTAMP renvoie une valeur construite ainsi YYYYMMDDHHMMSS

Cela explique les sauts brutaux de 40 secondes toutes les minutes. Je te laisse deviner la cata que ca aurait donné le 31-12 d'une année quelconque à 23h59:59.

ref : http://dev.mysql.com/doc/refman/5.0/...functions.html
fenkys est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h34.


 
 
 
 
Partenaires

Hébergement Web