JeuWeb - Crée ton jeu par navigateur
Probleme de calcul de date [Regle] - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Probleme de calcul de date [Regle] (/showthread.php?tid=1924)

Pages : 1 2


Probleme de calcul de date [Regle] - Kassak - 24-10-2007

Bonsoir bonsoir, je suis en train d'essayer de faire divers calcul en utilisant les fonctions de date, time etc...et je galere un peu.

Je vais vous montrez juste une partie de ce que je souhaites faire, car je pense que se sera la même procédure pour mes autres calculs.
Alors j'ai ma date sous ce format :
Code PHP :
<?php 
$date
= date('d/m/y \à H:i');

Ce que je voulais faire est simple, determiner a partir de cette date, quel jour il était 5 jours plus tot, pour ainsi supprimer tout ce qu'il faut dans la base de données de mon jeu ( historique et message si vous voulez savoir )

Voici ce que j'ai fais :

Code PHP :
<?php 
$nbsec
= 432000;
$date_efface = date('d/m/y \à H:i:s',time()-$nbsec);

mysql_query('DELETE FROM action WHERE date <'.$date_efface.'') or die (mysql_error());

Avec cette variable $date_efface j'obtiens bien la date d'il y a 5 jours.
Mon probleme, on est le 24/10, j'ai un message qui date du 25/09, il ne partira pas, car le mois n'est pas pris en compte dedant, seuleument le jour, donc legerement embetant et je ne vois aps comment y remedier^^
Tant que j'y suis, avant, je faisais un select des actions ou la date est inferieur a $date_efface, et je faisais une boucle qui supprimait les messages, maintenant je n'ia mis que le DELETE, et cela ne marche plus, le probleme vient d'ou?

Voili voila merci d'avance, si je n'ai pas était assez clair dites le moi!


RE: Probleme de calcul de date - Sephi-Chan - 24-10-2007

Quel est le type de ton champ date ?


RE: Probleme de calcul de date - Kassak - 24-10-2007

C'est un Varchar(50), ca vient de la?


RE: Probleme de calcul de date - Sephi-Chan - 24-10-2007

On a inventé des champs TIMESTAMP, DATE, TIME ou DATETIME. C'est bien plus pratique que d'utiliser PHP, et bien moins gourmand en ressources.

Je te conseille donc de passer ton champ en TIMESTAMP, ça te permettra de stocker ton timestamp au format : 2007-10-24 21:28:12

De plus, grâce à la valeur par défaut CURRENT_TIMESTAMP, tu n'as même pas besoin de renseigner ton champ au moment du INSERT. Il prend par lui même le TIMESTAMP actuel lors de l'insertion dans la base.

Ensuite, tu as une multitude de fonctions SQL pour traiter ça.

Par exemple avec :
Code :
DELETE FROM `messages` WHERE `ACCcreation_date` < DATE_SUB( CURRENT_TIMESTAMP( ) , INTERVAL 5 DAY )
Je supprime toutes les entrées de la table message qui ont une date de création inférieur à la date actuelle moins 5 jours.

Imagine donc qu'au moment de la requête, le TIMESTAMP SQL est 2007-10-24 21:00:00, la requête supprimera tous les champs crées avant le 2007-10-19 21:00:00.

C'est pas magnifique ?


Sephi-Chan


RE: Probleme de calcul de date - Kassak - 24-10-2007

Je la met comme ca? Rien a modifier a par le nom de ma table? Je dois dire que j'en apprend tous les jours moi..^^


RE: Probleme de calcul de date - Kassak - 24-10-2007

Hum, cela ne marche pas, j'ai mis le type timestamp a mon champ date, j'ai rentré une date d'il y a un mois, et quand je lance le script rien ne se passe.

Tu as loupé une ligne?^^


RE: Probleme de calcul de date - Sephi-Chan - 24-10-2007

Ben il faut que tu mettes à ton champ date le type TIMESTAMP.

Cela aura pour effet de détruire les informations de date déjà présentes dans ce champ (tu auras 0000-00-00 00:00:00 à la place). Attention donc.
Pour remettre des informations cohérentes, tu as juste à faire (une seule fois, dans phpMyAdmin par exemple) :
Code :
UPDATE `actions` SET date = CURRENT_TIMESTAMP();

Après tu pourras modifier manuellement quelques unes de ces dates pour tester ta requête. Si tu modifies manuellement, garde en tête le format des timestamp SQL, qui est AAAA-MM-JJ HH:MM:SS.


Sache aussi que cette manière de stocker les timestamp est également plus flexible à l'affichage, en partie grâce à la fonction DATE_FORMAT(date,format).

Si tu fais :
Code :
SELECT `nom`, DATE_FORMAT(`date`, '%e/%m/%Y à %kh%i') FROM `actions`;
Tu auras en réponse le nom et la date à laquelle chaque action a été faite au format JJ/MM/AAAA à HHhMM ! C'est super non ? Ça sort de la BdD et c'est déjà prêt à être affiché par PHP !


Sephi-Chan


RE: Probleme de calcul de date - Kassak - 26-10-2007

Alors alors, je n'arrive pas a faire marcher cette requete...

Code PHP :
<?php 
mysql_query
("DELETE FROM `action` WHERE `ACCcreation_date` < DATE_SUB( CURRENT_TIMESTAMP( ) , INTERVAL 5 DAY )") or die (mysql_error());

Le champ ou il y a la date s'apelle...date et la table s'apelle action.


Et quand je lance le script, rien ne se passe, j'ai pourtant un message datant du 2007-08-28 22:19:53.

Est ce qu'il n'y aurait pas le même probleme qu'a début? Que le 5 day ne prennent en compte que les jours, et pas le mois, l'année etc...?[/php]


RE: Probleme de calcul de date - Sephi-Chan - 26-10-2007

Peux-tu nous montrer l'exportation de ta table (structure et données) que je puisse faire des tests ?


Sephi-Chan


RE: Probleme de calcul de date - Kassak - 26-10-2007

Citation :Structure de la table `action`
--

CREATE TABLE `action` (
`id` int(11) NOT NULL auto_increment,
`description` text NOT NULL,
`joueur` varchar(255) NOT NULL default '',
`adversaire` varchar(250) NOT NULL default '',
`date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1527 ;

--
-- Contenu de la table `action`
--

INSERT INTO `action` VALUES (1515, 'qegazg', 'kassak', 'afzf', '2028-08-01 00:00:00');
INSERT INTO `action` VALUES (1514, 'sbhzehze', 'kassak', 'zeggzeg', '2007-08-28 22:19:53');
INSERT INTO `action` VALUES (1516, 'Vous êtes mort', 'kassak', 'La mort', '2007-10-24 00:00:00');
INSERT INTO `action` VALUES (1517, 'Vous êtes mort', 'kassak', 'La mort', '2007-10-24 21:48:14');
INSERT INTO `action` VALUES (1518, 'Vous êtes mort', 'kassak', 'La mort', '2007-10-24 21:48:20');
INSERT INTO `action` VALUES (1519, 'Vous êtes mort', 'kassak', 'La mort', '2007-10-24 21:48:27');
INSERT INTO `action` VALUES (1520, 'rhzh', 'kassak', '5555', '2007-10-24 22:07:03');
INSERT INTO `action` VALUES (1521, 'zehzhzeh', 'kassak', '555', '2007-10-24 22:07:19');
INSERT INTO `action` VALUES (1522, 'zhhezhzeh', 'kassak', 'zhzeh', '2007-10-24 22:07:53');
INSERT INTO `action` VALUES (1523, 'ahe', 'kassak', '5', '2007-10-24 22:08:43');
INSERT INTO `action` VALUES (1524, 'd', 'kassak', 'd', '2007-10-24 22:09:23');
INSERT INTO `action` VALUES (1525, 'eee', 'kassak', '55', '2007-10-24 22:10:20');
INSERT INTO `action` VALUES (1526, 'sffsf', 'kassak', 'sfs', '2007-10-24 22:16:04');


C'est cela que tu veux? J'y est inscrit n'importe quoi, t'inquiete pas, c'était juste pour tester Wink