JeuWeb - Crée ton jeu par navigateur

Version complète : Probleme de calcul de date [Regle]
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2
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!
Quel est le type de ton champ date ?
C'est un Varchar(50), ca vient de la?
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
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..^^
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?^^
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
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]
Peux-tu nous montrer l'exportation de ta table (structure et données) que je puisse faire des tests ?


Sephi-Chan
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
Pages : 1 2