problème date, affichage juste mois, année

Eléphanteau du PHP | 25 Messages

19 mars 2011, 21:21

Bonjour à tous,

Je bloque sur ce petit problème :

Code : Tout sélectionner

$jour=date("d", $datefr); $mois=date("m", $datefr); $annee=date("Y", $datefr); $heures=date("G", $datefr); $minutes=date("i", $datefr); echo "$datefr, $jour, $mois, $annee, $heures, $minutes";
Et ça m'affiche ceci :
2011-10-09 19:30:00, 01, 01, 1970, 1, 33

Pouvez-vous m'éclairer ?

merci par avance,
Aurélien

ViPHP
xTG
ViPHP | 7331 Messages

20 mars 2011, 00:30

As-tu activé toutes les erreurs PHP ?
En cas de problème de fuseau horaire cette fonction génère un message E_NOTICE et E_STRICT ou E_WARNING.

Ton paramètre default_timezone du php.ini serait-il non configuré ?

Eléphanteau du PHP | 25 Messages

20 mars 2011, 13:25

Bonjour,

Merci pour cette réponse !

Il n'y a que sur cette page que la décomposition d'une date pose problème... C'est pour cela que je ne comprends pas !


Sur les autres pas je décompose de cette manière "Rendez vous le mercredi 18 mai 2011 a 17:00 ! " et ça marche sans soucis...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 mars 2011, 13:31

Euh... si "echo $datefr" t'affiche "2011-10-09 19:30:00", c'est que ce n'est pas un timestamp... et du coup tu ne peux pas le passer comme 2nd argument à la fonction date :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 25 Messages

20 mars 2011, 13:48

Je stocke ma date dans un datetime

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 mars 2011, 13:56

Ca ne pose pas de soucis, il faut juste que tu convertisses la valeur que tu récupères de ta bdd en timestamp pour pouvoir l'utiliser dans ta fonction date()
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 25 Messages

20 mars 2011, 13:59

Comment faire ça ?

Ce qui m'intrigue c'est que dans d'autres pages je fais exactement pareil et ça marche sans problème...

Bizarre le php ! :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 mars 2011, 14:08

Tu peux par exemple utiliser la fonction mktime() pour générer un timestamp à partir des infos que tu as récupéré en base...

Mais effectivement, c'est assez étrange que cela fonctionne ailleurs ... lorsque tu affiches ta variable $datefr (ou son équivalent) dans l'un de script qui fonctionne, tu obtiens un nombre ou une date formatée comme celle-ci ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 25 Messages

20 mars 2011, 14:46

Ailleurs la date s'affiche bien comme pour ma variable $datefr

Eléphanteau du PHP | 25 Messages

20 mars 2011, 14:55

Effectivement j'avais oublié une ligne, j'utilisais avant "strtotime()", là j'ai essayé avec mktime() et ça me donne ça :

2011-10-09 19:30:00, 11, 06, 2011, 19, 52

11=jour
06=mois
2011=année
19=heures
52=minutes

Donc il y a toujours un problème... :|

ViPHP
AB
ViPHP | 5818 Messages

20 mars 2011, 19:37

Pour info tu peux récupérer la date formatée directement dans ta requête
mysql_set_charset('utf8');

$setime = "SET lc_time_names = 'fr_FR'";

mysql_query($setime) or die(mysql_error());

$query = "SELECT ... DATE_FORMAT(champ_date,'%W %d %M à %H:%i') as datefr FROM matable WHERE ...";

Eléphanteau du PHP | 25 Messages

20 mars 2011, 19:40

Merci pour cette information.

Mon but est de récupérer une date avec une variable par "information" (jour, mois, année, heures et minutes) pour ensuite les faire être pré-sélectionnées dans une liste déroulante (une pour le jour, une pour le mois, etc.)

ViPHP
AB
ViPHP | 5818 Messages

20 mars 2011, 20:11

Utilise alors plutôt strftime pour avoir une date en français
$date_mysql = '2008-08-20 04:13:41';

function Date_fr($da)
{
   setlocale(LC_TIME, "french");
   $strtime = strtotime($da);
   
   $jour = strftime('%A', $strtime);
   $num_jour = strftime('%d', $strtime);
   $mois = strftime('%B', $strtime);
   $an = strftime('%Y', $strtime);
   $heure = strftime('%H', $strtime);
   $min = strftime('%M', $strtime);
      
  return array('j'=>$jour,'num'=>$num_jour,'mois'=>$mois,'an'=>$an,'h'=>$heure,'m'=>$min);
}

echo '<br />';
print_r(Date_fr($date_mysql));
echo '<br />';
Suivant les cas tu pourras avoir à faire un utf8_encode sur le mois

Eléphanteau du PHP | 25 Messages

20 mars 2011, 22:19

Merci beaucoup ça marche parfaitement !