Page 1 sur 1
formatage date
Posté : 25 nov. 2007, 18:49
par Invité
Salut,
Je recupère des dates sous le format : samedi 24 novembre 2007 par exemple.
Je veux les convertir au format AAAA-MM-JJ pour les intégrer en base de donnée mysql .
Quelqu'un a déjà fait cette conversion ?
Merci
Posté : 25 nov. 2007, 22:19
par Patriboom
Récupères-tu à partir de formulaire?
Récupères-tu à partir de la date du système?
Le passage du texte (en français de surcroît) au code date est malaisé, vérifie les propriétés de la fonction strtotime d'abord:
http://ca3.php.net/manual/fr/function.strtotime.php
ou encore mktime:
http://ca3.php.net/manual/fr/function.mktime.php
Le plus simple étant de revenir au timestamp qui te permettra ensuite de faire ce que tu voudras.
Posté : 26 nov. 2007, 09:28
par d0m
avant tout, il faut lister tous les formats que tu risques de récupérer,
ensuite faire une règle de conversion pour chaque cas en utilisant les fonctions de chaines de caractères (
explode,expressions régulières...).
Posté : 30 janv. 2009, 12:23
par ameego
Bonjour à tous,
Je me permets d'utiliser ce sujet pour résoudre un problème auquel je suis confronté. Je débute en php et plusieurs choses m'échappent pour le moment. Je cherche à modifier l'affichage de dates entrées dans une base de donnée. YYYY-mm-dd deviendrait dd-mm-YYYY. Mon idéal en termes d'affichage serait même quelque chose dans cette veine là : "10 fév. 09".
Toutes mes dates entrées dans mysql sont de type DATE. D'après ce que j'ai pu voir, il est possible de modifier le format directement dans Mysql mais ça ne semble pas être la meilleure solution. Le plus approprié serait peut être de modifier l'affichage avec php, ce que je ne parviens pas à faire, même après recherches. A savoir que j'ai une liste de dates, toutes contenues dans une table.
Mon code est le suivant. Quelle est la meilleure solution à adopter ?
Code : Tout sélectionner
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("maBDD");
$reponse = mysql_query("SELECT * FROM maTable ORDER BY date");
while ($donnee = mysql_fetch_array($reponse) )
{
?>
<?php echo $donnee['date'];?>
<?php
}
mysql_close();
?>
Merci pour votre aide.
Posté : 30 janv. 2009, 19:06
par AB
@ameego Evidemment qu'il faut enregistrer la date au format sql et ne la transformer que pour l'affichage sinon tu ne pourrais plus utiliser les fonctions date de mysql pour faire du tri sur les dates
Pour répondre à vos deux questions :
// localisation pour utilisation des fonctions strftime() et strptime()
setlocale (LC_TIME, 'fr_FR','fra');
// transformation d'une date "écrite" en date pour mysql suivant la configuration locale
// Attention la fonction strptime ne fonctionne pas sous windows
$date = 'vendredi 30 janvier 2009';
$date_tab = strptime($date, '%A %d %B %Y');
$date_for_sql[] = $date_tab['tm_year'] + 1900;
$date_for_sql[] = $date_tab['tm_mon'] + 1;
$date_for_sql[] = $date_tab['tm_mday'];
$date_sql = vsprintf("%04d-%02d-%02d", $date_for_sql);
echo 'date_sql = '.$date_sql.'<br />';
// affiche : date_sql = 2009-01-30
// Transforme une date sql en date écrite selon la configuration locale
$date = strtotime($date_sql);
$date_format = strftime("%A %d %B %Y",$date);
echo 'date = '.$date_format.'<br />';
// affiche : date = vendredi 30 janvier 2009
La première transformation fonctionne pour les années >= 1900 et la seconde pour >= 1970
Posté : 02 févr. 2009, 11:45
par ameego
Merci pour ta réponse.
Cependant, au risque de paraître stupide, j'ai du mal à comprendre ce code et la façon de l'intégrer de manière à ce que chaque date appelée de mysql soit formatée correctement.
Si j'en crois ta réponse il y a deux transformations, mais je ne sais pas si elles sont successives ou indépendantes. Pourrais-tu m'apporter quelques précisions ?
Merci d'avance !
Posté : 02 févr. 2009, 11:53
par mere-teresa
Et si tu demandais directement la date au bon format (cela signifie que le formatage se fait au niveau de la BDD, et que la charge processus repose sur le serveur qui héberge la BDD).
La doc : http://dev.mysql.com/date_format
Pour toi, cela rend ton code plus simple :
mysql_connect("localhost", "root", "");
//n'hesite pas à utiliser mysqli plutôt que mysql, c'est plus performant : seulement mysqli est dispo à partir de PHP 5
mysql_select_db("maBDD");
$reponse = mysql_query("SELECT * FROM maTable ORDER BY date");
// select * c'est pas bien :)
// n'appelle pas tes champs date, mot réservé, source de bazar, préfère date_inscr ou date_insertion ou je ne sais quelle autre description
$reponse = mysql_query("SELECT DATE_FORMAT('date', '%d %M %Y') FROM maTable ORDER BY maDate");
// attention tu vas l'avoir en anglais
while ($donnee = mysql_fetch_array($reponse) )
{
$maDate = $donnee['date'];
}
mysql_close();
Exemple
Code : Tout sélectionner
mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
-> 'Sunday October 2009'
Posté : 02 févr. 2009, 12:23
par ameego
Un grand merci pour ta réponse rapide.
Ce sont de précieux conseils que tu m'as donné, notamment ce qui concerne l'importance du nom d'un champ pour éviter les confusions.
Sinon, pour quelles raisons il n'est pas conseillé d'utiliser "Select *" ? Existe-t-il une alternative pour arriver au même résultat ?
Merci !
Posté : 02 févr. 2009, 12:29
par mere-teresa
Eviter le " SELECT * " :
Précisez le nom des champs que vous souhaitez récupérer pour éviter les risques d'erreur (lorsqu'un même nom se trouve dans plusieurs table), avoir des requêtes plus optimisées et un code php facilement maintenable.
Lister les champs en détail permet d'une part de ne récupérer que ce qui est nécessaire (inutile de ramener 12 champs mediumtext de 500Ko quand tout ce qui nous interesse c'est un id et un titre). De plus, le nombre de colonnes et l'ordre des champs pouvant avoir un impact sur le traitement qui va suivre (si l'on utilise mysql_fetch_row() par exemple), il est préférable de pouvoir les maîtriser.
Cela permet aussi de connaître les noms des colonnes retournés par la requête, et donc le noms des index utilisables.
Do's and don't : les bonnes pratiques en SQL[/url]
Posté : 03 févr. 2009, 18:16
par AB
Merci pour ta réponse.
Cependant, au risque de paraître stupide, j'ai du mal à comprendre ce code et la façon de l'intégrer de manière à ce que chaque date appelée de mysql soit formatée correctement.
Si j'en crois ta réponse il y a deux transformations, mais je ne sais pas si elles sont successives ou indépendantes. Pourrais-tu m'apporter quelques précisions ?
Merci d'avance !
Bien sûr elles sont indépendantes.
La première est dans l'hypothèse où un visiteur rentrerait une date en français (ex: mardi 3 février 2009) dans un champ de saisie et on la transforme pour être au format mysql.
La seconde fait l'inverse, elle par d'une date au format mysql pour un affichage en français (lire les commentaires du code et voir la doc sur les fonctions utilisées pour obtenir un autre formatage).
Posté : 04 févr. 2009, 01:49
par rolusseum
Petite question au sujet de
Eviter le " SELECT * " :
Précisez le nom des champs que vous souhaitez récupérer pour éviter les risques d'erreur (lorsqu'un même nom se trouve dans plusieurs table), avoir des requêtes plus optimisées et un code php facilement maintenable.
Dans le cas ou tous les champs d'une table sont "appelés", que préférer?
un select (et lister tous les champs) ou un select * ?
Posté : 04 févr. 2009, 03:44
par AB
Petite question au sujet de
Eviter le " SELECT * " :
Précisez le nom des champs que vous souhaitez récupérer pour éviter les risques d'erreur (lorsqu'un même nom se trouve dans plusieurs table), avoir des requêtes plus optimisées et un code php facilement maintenable.
Dans le cas ou tous les champs d'une table sont "appelés", que préférer?
un select (et lister tous les champs) ou un select * ?
Dans l'absolu lister tous les champs est un peu plus performant mais il est évident que dans ce cas la différence sera beaucoup moins significative et que pour des raisons pratiques on puisse préférer un select *