Changer le format d'un timestamp [Résolu]

Messages postés
9
Date d'inscription
dimanche 26 juillet 2009
Statut
Membre
Dernière intervention
12 novembre 2009
- - Dernière réponse : kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
- 6 août 2009 à 22:46
Bonjour à tous,

Dans ma base, j'ai un champs timestamp qui enregistre par défaut la date et l'heure du jour lors de l'ajout d'un enregistrement. Elle s'ajoute dans ce format ex : 2009-08-02 06:45:00.

Sur mon site, dans mes pages de visualisation d'info, je veux afficher la date mais sans l'heure. En fait, je ne veux que 2009-08-02. J'ai essayé date(), date_format('Y-mm-dd',$date) mais rien n'y fait.

Quelqu'un pourrait me venir en aide?

Merci
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
662
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
18 septembre 2009
3
Merci
Bonjour,

La solution proposée par Kohntark est valide, mais hélas pas portable, la fonction DATE_FORMAT() de MySQL n'étant soit pas implémentée ailleurs, soit pas compatible au niveau syntaxe.

Au vu de ton format dateTime utilisé, la fonction date ne peut effectivement pas le reconnaitre. La documentation date() das la doc PHP précide:
"Note: Pour générer un timestamp à partir d'une représentation de date, vous pouvez utiliser la fonction strtotime(). De plus, certaines bases de données disposent de fonctions pour convertir leurs propres formats de date en timestamp (par exemple, MySQL et sa fonction » UNIX_TIMESTAMP())."

Avec le format retourné par ton MySQL standard, un simple:

$dt = substr( $dateDossier, 0, 10 ) ;

remplit la mission.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nautilus99
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
3
Merci
Arf, il a gagné le bougre
Je reste tout de même sur mon point de vue : formater au plus proche de la source en tant que date reste plus propre, mais c'est uniquement une question de goût.
Puisque les deux réponses sont valides, peux tu valider également la mienne afin d'aider éventuellement d'autres personnes (ce n'est pas pour mon égo, ça je m'en contrefou gravement )


Cordialement,


Kohntark -

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Salut,

Fais ça dans la requête sql :
SELECT DATE_FORMAT(tonChampDate, "%Y-%m-%d") FROM taTable


Cordialement,

Kohntark -
Commenter la réponse de kohntark
Messages postés
9
Date d'inscription
dimanche 26 juillet 2009
Statut
Membre
Dernière intervention
12 novembre 2009
0
Merci
Bonjour,

En fait, je ne veux pas sélectionner mes données à partir de la date.

Ma requête récupère la liste de dossier par idDossier et je veux afficher la date de chacun des dossiers alors j'ai :

-------------------------
$sql_doss_search = "SELECT * FROM dossier WHERE idDossier LIKE '$idDossier'";
$query_doss_search = mysql_query($sql_doss_search)
or die ("Requête incorecte");
while ($rs_doss_search=mysql_fetch_array($query_doss_search)) {
-------------------------

et ici je liste les dossiers.

Comment je peux afficher la date des dossiers sans l'heure car mon champs $dateDossier est un timestamp.

J'ai essayé :
--------------
echo date_format($dateDossier,'Y-m-d');
--------------
mais ca ne fonctionne pas... aussi à l'inverse :
--------------
date_format('Y-m-d',$dateDossier);
--------------
mais pas plus de succès.

Merci
Commenter la réponse de ofillion
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
La requête que je te propose ne sélectionne pas les enregistrements à partir d'une date (ce n'est pas un WHERE) mais la formate comme tu le souhaites.

En l'adaptant à ta requête ça devrait donner qq chose comme :
$sql_doss_search = "SELECT 
DATE_FORMAT(tonChampDate, "%Y-%m-%d"), autrechamp, autreautrechamp 
FROM dossier 
WHERE idDossier LIKE '$idDossier'"; 



Cordialement,

Kohntark -
Commenter la réponse de kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
[mode inauguration smileys>>autres]
Nautilus !!!!
T'as fini de me contredire ????
je m'adapte au code !!
/mode
(inutile de te notifier que je plaisante )

Plus sérieusement, tu as bien raison de le préciser, ce n'est pas portable. Mais la toute première raison de cette "non portablité" est l'utilisation de mysql_query. Il aurait fallu conseiller PDO, encore qu'il y ait long à dire là dessus, la réelle abstraction d'un sgdb ne pourra se faire efficacement que lors d'un respect bien plus prononcé des normes sql pour chacun d'entres eux, autant dire que ça n'est pas pour demain.
Par ailleurs, et tu me corrigeras si je me trompes (j'ai une mémoire qui s'apparente à une prom de 56K), mais il me semble que le format date retourné par Oracle est incompatible avec ta solution.

Cordialement,


Kohntark -
Commenter la réponse de kohntark
Messages postés
662
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
18 septembre 2009
0
Merci
Oui, les problèmes de portabilité existent et sont souvent un casse-tête d'ailleurs.

L'appel d emysql_query, tout comme le sappels directs aux divers pilotes, je les ai abndonnés depuis pas mal d etemps, d'abord au profit de adodb, puis de PDO..

Bien qu'une portabilité totale soit difficile à atteindre, on peut tenter de réduire la non portabilité.

[mode joke on]
En mod enattif, oui Oracle a un format d etimestamp incompatible avec la version chaine textuelle de MySQL et quasiment tous les autres.
Mais on peut le forcer via un set DATETIMEFORMAT=ISO pour résoudre cette incompatibilité.
[mode joke off]
Commenter la réponse de nautilus99
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
[joke]
DATETIMEFORMAT=ISO

... La solution proposée par Nautilus est valide, mais hélas pas portable, la fonction DATETIMEFORMAT d'Oracle n'étant soit pas implémentée ailleurs, soit pas compatible au niveau syntaxe.

hé ouais, c'est le bord.., on tourne en rond.
/joke

Bonne soirée à toi,


Kohntark -
Commenter la réponse de kohntark
Messages postés
662
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
18 septembre 2009
0
Merci
lol, non, on ne tourne pas en rond :)
Avec PDO, on y arrive très bien, en héritant d ePDO et en organisant un peu le système on arrive à une abstraction d epresque tout, sauf les procédures stockées..

Et encore on n'a abordé que MySQL et Oracle, DB2 et MS-SQL collectionnent aussi les "extensions" incompatibles...
Commenter la réponse de nautilus99
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
yes, mais s'il faut re développer du code et étendre PDO ce n'est plus vraiment une classe d'abstraction, ça revient à faire un switch case 'mysql'; case 'oracle' (je tire un peu par les cheveux mais juste un peu)
Et puis les triggers, sequences, etc ... ça se gère efficacement comment via PDO ??
Bref, j'ai du mal à comprendre l'engouement autour de PDO, même si je l'utilise et que cela résous beaucoup de pb. Pour autant c'est loin, très loin, d'être la solution miracle exposée un peu partout, mais peut être sont ce mes lacunes qui me font penser ça.


Cordialement,


Kohntark -
Commenter la réponse de kohntark
Messages postés
662
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
18 septembre 2009
0
Merci
S'il existait une solution miracle et universelle, on n'en serait pas à chercher la patite bête aux triggers, séquences et autres serial (spécialité postgresql)...

Plus sérieusement, PDO présente quand même pas mal d'avantages pour un nombre intéressants d ecas de figure, et se révèle très pratique et clair à utiliser.

A défaut d'être une solution absolue, on fait avec, tout comme les amateurs d eJava se débrouillent avec JDBC.. en sous-classant.
Commenter la réponse de nautilus99
Messages postés
9
Date d'inscription
dimanche 26 juillet 2009
Statut
Membre
Dernière intervention
12 novembre 2009
0
Merci
Merci la gang,

j'ai opté pour la solution de nautilus99 :

$dt = substr( $dateDossier, 0, 10 ) ;


Pb réglé !!
Commenter la réponse de ofillion