24-05-2008, 03:01 PM
C'est à moi de m'excuser pour toi, IGstaff… L'utilisation de fonctions de dates de MySQL pour manipuler des champs de type TIMESTAMP, TIME ou DATE est bien plus robustes que de stocker des timestamp sous forme d'entier puis les manipuler avec les fonctions de PHP.
Pour résoudre le problème, il suffit d'utiliser les fonctions de dates et d'heures de MySQL comme cela :
Par exemple, au moment où tu mets à jour (ou insert) ta table la date de fin du temps de garde, tu fais :
Tu remplaces ici n par la valeur que tu veux, et SECOND par l'unité que tu veux parmi SECOND, [font=CourieMINUTE[/font], [font=CourieHOUR[/font], [font=CourieDAY[/font], [font=CourieMONTH[/font], [font=CourieYEAR[/font]. Tu mets ensuite la condition que tu veux.
Le champ vaudra alors la date actuelle à laquelle est ajoutée la durée indiquée. C'est donc déjà très pratique à l'insertion.
Ensuite, pour savoir si la date est passée, il suffit de regarder le signe de la soustraction de la date actuelle moins la date de fin de la garde.
Cela permet de sélectionner les entrées de la table dont la garde est terminée.
Mais tu peux également rechercher pour une ressource particulière. Si par exemple tu veux vérifier que ton joueur a fini son tour de garde, tu peux faire
Le champ tour_de_garde_fini vaudra donc 1 si la garde est finie, 0 si elle est en cours.
Sephi-Chan
Pour résoudre le problème, il suffit d'utiliser les fonctions de dates et d'heures de MySQL comme cela :
Par exemple, au moment où tu mets à jour (ou insert) ta table la date de fin du temps de garde, tu fais :
Code :
UPDATE table
SET date_fin = DATE_ADD(NOW(), INTERVAL n SECOND);
WHERE condition
Le champ vaudra alors la date actuelle à laquelle est ajoutée la durée indiquée. C'est donc déjà très pratique à l'insertion.
Ensuite, pour savoir si la date est passée, il suffit de regarder le signe de la soustraction de la date actuelle moins la date de fin de la garde.
Code :
SELECT *
FROM table
WHERE NOW() - date_fin < 0
Mais tu peux également rechercher pour une ressource particulière. Si par exemple tu veux vérifier que ton joueur a fini son tour de garde, tu peux faire
Code :
SELECT *,
IF((NOW() - date_fin) <= 0, 1, 0) AS "garde_finie"
FROM table;
Sephi-Chan