Page 1 sur 1
format de date dans la BDD
Posté : 22 janv. 2006, 13:33
par anna70
Bonjour à tous,
un petit coup de main de votre part m'aiderai à résoudre cette question qui me hante

:
un formulaire pour un dépôt d'annonce ou quand je fais un insert dans la base de données je declare la date de dépôt comme ça :
qui s'affichera dans la base de données comme ex : 22-01-2006
en faisant un select pour afficher les annonces et pour les trier par date ça ne marche pas (ça affiche mais le tri ne se fait pas par date).
alors ma question est, comment dois je mettre les attribut du champs datedepo dans la base de données ?
comme ça ?? :
`datedepo` date NOT NULL default '0000-00-00',
sinon que me preconisez-vous comme solution ?
merci d'avance .
Posté : 22 janv. 2006, 13:53
par Cyrano
Avant d'enregistrer une date dans la base de données, il faut commencer par la mettre au format approprié. Dans ta base en effet, le format correspond à aaaa-mm-jj et ton formulaire récupère une date au format jj/mm/aaaa.
Avec une expression régulière, tu peux parfaitement convertir la date dans le bon format
AVANT l'enregistrement :
<?php
/* Exemple de chaine de date telle que récupérée du formulaire */
$chainedate = "22/01/2006";
/* Masque d'expression régulière */
$masque = "#(\d{2})/(\d{2})/(\d{4})#";
/* Conversion du format français au format anglais */
$date_sql = preg_replace($masque, "$3-$2-$1", $chainedate);
/* Affichage de contrôle */
echo("<p>". $date_sql ."</p>");
?>
Va afficher :
2006-01-22
Posté : 22 janv. 2006, 14:24
par anna70
merci cyrano de ta réponse,
1- alors on va dire que la date de la base s'écrira comme ça :
`datedepo` date NOT NULL default '00-00-0000',
2- la déclaration comme
$date = date ("j-m-Y");
3- et que ça affiche dans la base comme ça :
22-01-2006
comment faire l'affichage des annonces en les triant par date .
dans la requête le tri par "22-01-2006 ou 21-01-2006" ne voudra rien dire, à part que l'ecriture de la date dans la base se réécrit seulement en chiffre ( genre : 1132083909 ) et la ça voudra dire qque chose à la requête .
comment faire pour la réécrire comme ça ?? ou sinon comment declarer le champs datedepo dans la base en int au lieu de date ?
merci
Posté : 22 janv. 2006, 14:41
par Cyrano
Ce n'est pas une bonne idée de modifier le format dans la base de données: ça va te couper toutes les fonctions SQL intégrées de tri sur les dates disponibles avec un format anglais. Il vaut mieux avoir un traitement de transformation pour enregistrer et un autre inverse a la récupération pour afficher.
Posté : 22 janv. 2006, 14:46
par Invité
Ce n'est pas une bonne idée de modifier le format dans la base de données: ça va te couper toutes les fonctions SQL intégrées de tri sur les dates disponibles avec un format anglais. Il vaut mieux avoir un traitement de transformation pour enregistrer et un autre inverse a la récupération pour afficher.
comment tu le ferais toi , t'aurais un exemple stp merci .
Posté : 22 janv. 2006, 14:59
par fab
moi pour les dates dans les bdd j'utilise le type de champ timestamp et la fonction sql NOW() apres du côté de php je convertis en timestamp UNIX et apres date()

Posté : 22 janv. 2006, 15:04
par anna70
moi pour les dates dans les bdd j'utilise le type de champ timestamp et la fonction sql NOW() apres du côté de php je convertis en timestamp UNIX et apres date()

je vais essayer la façon de fab et je vous tiens au courant. merci
Posté : 22 janv. 2006, 15:04
par Cyrano
Pour ma part, j'utilise le type DATE ou DATETIME selon le besoin spécifique. Pour les échanges avec la base, je fais les transformations nécessaires : de la page vers la base en transformant de la manière que j'ai indquée plus haut, et de la base vers le page en faisant exactement l'inverse.
Tout simplement. Mais ce faisant, j'ai à ma disposition beaucoup de
fonctions SQL me permettant des tris précis
Posté : 22 janv. 2006, 15:24
par anna70
merci cyrano,
je vais opter pour cette solution ce qui va m' epargner de faire une usine à gaz

Posté : 22 janv. 2006, 17:42
par anna70
bon j'ai fais dater l'annonce par un insert :
Code : Tout sélectionner
INSERT INTO table (id,ann,date,periodediffusion)values
('','vente',CURRENT_DATE,(MONTH(CURRENT_DATE) + 2))
la date d'insertion se fait juste
periode de duffusion de 2 mois pour l'annonce mais je n'ai pas reussi à rajouter 2 mois à la date d'aujourd'hui .
qq1 aurait une ecriture plus juste de la requete merci .
Ps : c'est une requete d'exemple juste pour avoir meilleur ecritutre de l'ajout de 2 mois à la date . merci .
Posté : 22 janv. 2006, 18:26
par anna70
ça y'est j'ai trouvé :
tu fais :
Code : Tout sélectionner
$periode = date("Ymj", mktime (0,0,0,date("m") + $periodediff,date("j"),date("Y")));
INSERT INTO table (id,ann,date,periodediffusion)values
('','vente',CURRENT_DATE,'$periode')
et merci encore.