Aller au contenu

Je coince avec les dates


Sujets conseillés

Posté

Salut,

bon, pour certains, cela va paraitre très simple, mais perso, j'ai encore du mal avec ce truc la.... :wacko:

J'ai une date dans un champ de ma base. (format américain)

Je souhaite pouvoir ressortir tout les enregistrement du mois courant.

Mais je nais pas vraiment comment faire cette opération de comparaison.

J'avais trouve une astuce, avec une comparaison de chaine de caractère, mais je pense qu'il doit y avoir un moyen plus simple.

Si vous avez des débuts de pistes à me fournir, z'êtes les bienviendus :whistling:

Merci.

Posté (modifié)

Tu peux utiliser une condition de ce type :

SELECT ..... FROM ..... WHERE MONTH(tonchamp) = MONTH(NOW())

Voila ;o)

edit : Ca fonctionne avec un champ de type datetime

Modifié par petit-ourson
Posté (modifié)

Sinon si tu utilises un varchar,tu faits un autre varchar ou il y a juste le champs mois+année mis dedans.

$date = date('m-Y');
SELECT ..... FROM ..... WHERE month_year =  '$date'

Edit j'avais pas lu que le champ de la date était pas en varchar.

Oups,enfin ca te donne une idée quand meme.. :)

Modifié par snwoman49
Posté (modifié)

Effectivement je n'ai pas pris en compte l'année. (enfin ceci dit ce n'était pas demandé)

SELECT ..... FROM ..... WHERE MONTH(tonchamp) = MONTH(NOW()) AND YEAR(tonchamp) = YEAR(NOW())

Enfin ça me semble assez propre.

Modifié par petit-ourson
Posté (modifié)

Bonjour,

plutot que d'ouvrir un nouveau post je reprend celui-ci pour une question un peu similaire et surement aussi simple :

J'ai un champ datetime dans ma base qui se présente comme ça : 2005-18-05 11h46.

Je ne veux afficher que le 2005-18-05 (accessoirement dans l'ordre français mais ç'est secondaire).

Je récupère les dates dans une bouche while en lisant un mysql-fetch-array.

Je fais comment SVP ? Parce que dans ma requête j'ai un ORDER BY date qui prend tout de même en compte les heures.

Modifié par recherche_webmaster
Posté (modifié)

En fait, j'ai resolu mon pb hier...

Il me suffit d'utiliser la condition BETWEEN dans ma requête sql, et le tour est joué !

Pour convertir la date US en version Fr, j'utilise une fonction que j'ai trouvé sur le net :

function dateUsToFr ($datetime) {
       sscanf($datetime, "%4s-%2s-%2s %2s:%2s:%2s", $y, $mo, $d, $h, $mi, $s);
       return $d.'-'.$mo.'-'.$y;
}

function dateFrToUs ($datetime) {
       sscanf($datetime, "%2s-%2s-%4s %2s:%2s:%2s", $d, $mo, $y, $h, $mi, $s);
       return $y.'-'.$mo.'-'.$d;
}

Ca marche nickel.

Le lien qui va bien :Conversion date US vers FR

Edit : ajout du lien

Modifié par steph13
Posté (modifié)

ok alors je viens d'essayer cela :

$req="SELECT date FROM table ORDER BY date DESC LIMIT 0,5";
$res=mysql_query("$req");
while ($rep=mysql_fetch_array($res)){
$date= sscanf($rep[date], "%4s-%2s-%2s %2s:%2s:%2s", $y, $mo, $d, $h, $mi, $s);
      return $d.'-'.$mo.'-'.$y;
};
echo"
$date

";};
mysql_free_result($res);

J'obtiens :

Parse error: parse error, unexpected '}' on line 41

edit : la ligne 41 c'est celle qui vient après le echo de la boucle while. Je viens de "corriger" le problème de l'accolade après return maintenant c'est très original, mon tableau est vide et la barre de copyright se colle tout en haut.

Modifié par recherche_webmaster
Posté

Enleves le 'return', il n'a aucun sens dans ton cas :

Le 'return' permet de 'retourner' un résultat dans le cas de la fonction.

Dans le cas du while, c'est comme s'il zappait tout ce qui se trouve après le 'return', autrement dit, il arrête la boucle, et passe aussitot après l'accolade, oubliant du même coup le 'echo'.

Posté (modifié)

d'accord, je viens d'essayer ça :

$date= sscanf($bob[date], "%4s-%2s-%2s %2s:%2s:%2s", $d, $mo, $y);
   
;
echo"

parce que je ne veux que le jour, le mois, l'année, dans cet ordre.

j'obtiens:

Warning: sscanf(): Different numbers of variable names and field specifiers on line 23

(je n'ai pas dû bien la comprendre cette fonction sscanf...)

Modifié par recherche_webmaster
Posté

déjà essaie ça comme requête :

SELECT LEFT(date,10) FROM table ORDER BY LEFT(date,10) DESC LIMIT 0,5

Posté (modifié)

Ok je veux bien essayer, mais je voudrais bien comprendre la requête avant s'il te plaît.

Sinon un truc aussi : je voudrais ordonner par date et par libellé:

C'est à dire que si j'ai deux mots avec la même date, j'affiche d'abord par date pour tous les mots, puis par ordre alphabétique pour les deux mots avec la même date.

Comment je fais pour ça aussi svp ?

edit: pas l'air mal ton lien, j'enregistre la page.

Modifié par recherche_webmaster
Posté (modifié)

le SELECT LEFT(date,10) te renvera les 10 premiers caractères de ta date, le fait de le mettre dans le ORDER BY, te permettra de les classer aussi

ensuite, pour ton problème de tri il suffit de rajouter ton "mot" dans le ORDER BY :

ORDER BY LEFT(date, 10), mot

et tu obtiendras le tri que tu désires

Modifié par dread
Posté

si tout ça fonctionne comme tu veux, je t'expliquerai comment passer la date en français dans la requête directement

Posté (modifié)

ok merci,

alors je viens d'essayer, ça marche à moitié, c'est déjà bien:

En fait ma requête complète est :

$req="SELECT date, mot, specialite ,site FROM maTable ORDER BY date DESC LIMIT 0,5".

Donc je viens d'essayer ta formule

en mettant :

$req="SELECT mot, specialite, LEFT(date,10) site FROM maTable ORDER BY date DESC LIMIT 0,5"

et là la date est bien tronquée mais dans le tableau, la ligne site est remplacée par la date.

J'ai donc mis une virgule entre LEFT(date,10), site (pensant avoir fait une erreur), et là j'obtiens le site en bonne place dans la colonne mais dans la colonne date, j'ai un -1 qui apparaît.

EDIT : non j'ai dis une bétise je viens de vérifier : la colonne date apparait normalement tronquée mais dans la colonne site, et dans la colonne date j'ai donc un -1.

Modifié par recherche_webmaster
Posté (modifié)

$req="SELECT mot, specialite, LEFT(date,10) site FROM maTable ORDER BY date DESC LIMIT 0,5"

Il manque une virgule avant "site"

Sinon tu peux aussi a la place de LEFT(date,10) mettre cela CONCAT(DAY(date),'-', MONTH(date) ,'-',YEAR(date)) ... (enfin pas sûr de la syntaxe, j'ai pas de mysql sous la main)

Modifié par petit-ourson
Posté (modifié)

non j'ai dit, j'ai mis une virgule avant site et j'obtiens donc le problème suivant quand même.

Euh, je suis tout embrouillé là, avec le LEFT(date,10) je supprime bien la fonction sscanf oui?

Modifié par recherche_webmaster
Posté

quel est le format de ton champ date ? est-ce un vrai champ de type date ?

si tel est le cas alors voici le bon code :

$req="SELECT mot, specialite, DATE(date), site FROM maTable ORDER BY DATE(date) DESC LIMIT 0,5"

Posté (modifié)

bein voilà bouba t'a répondu !

$req="SELECT mot, specialite, CONCAT(DAY(date),'-', MONTH(date) ,'-',YEAR(date)), site FROM maTable ORDER BY DATE(date) DESC LIMIT 0,5"

<{POST_SNAPBACK}>

avec ce code tu repasses la date en français !

oui oui tu as la limitation aux 10 !

Modifié par dread
Posté (modifié)

Sinon tu peux aussi a la place de LEFT(date,10) mettre cela CONCAT(DAY(date),'-', MONTH(date) ,'-',YEAR(date)) ...

oui mais dans ma table c'est au format US year, month, day, ça va pas marcher ça ?

edit: il y'a eu un post avec celui la, je vais donc essayer la requête donnée juste avant, 2mn

Modifié par recherche_webmaster
Posté

bouh

alors je viens d'essayer texto la requête j'obtiens :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource  on line 22

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource on line 42

la ligne 22 c'est la ligne du while

Posté (modifié)

mais faut tester la requête dans ton phpMyAdmin et pas dans ton code php !

ensuite le while ne doit plus contenir les même choses, puisque la requête a changé !

procède par étapes :

1/ tu t'assures que ta requête fonctionne et qu'elle te renvoie le résultat escompté

2/ tu l'insères dans ton code php

Modifié par dread
Posté

mais faut tester la requête dans ton phpMyAdmin et pas dans ton code php !

ça change quoi? c'est une question de sécurité ? mais le site n'est pas en ligne.

ensuite le while ne doit plus contenir les même choses, puisque la requête a changé !

bien pour le while je fais simplement un $res[date] pour récupérer la date et pareil pour les autres champs.

Patience....

Posté (modifié)

Bon ça c'est mon code complet, après je déprime :

<?php
//ici on fait apparaitre le 1er tableau de l'accueil
$req="SELECT  specialite,nom,site CONCAT(DAY(date),'-', MONTH(date) ,'-',YEAR(date)) FROM annuaire ORDER BY DATE(date) DESC LIMIT 0,5" ;
$res=mysql_query("$req");
while ($bob=mysql_fetch_array($res)){
echo"
<tr>
<td>
$bob[site]
</td>
<td>
$bob[specialite]
</td>
<td>
$bob[nom]
</td>
<td>
$bob[date]
</td>
</tr>
";};
mysql_free_result($res);
?>

Modifié par recherche_webmaster

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...