Page 1 sur 2
[Résolu] Date et heure correctes, mais mal positionnées
Publié : 10 mai 2005, 17:25
par Nerva
Bonjour.
Dans un page PHP, j'affiche la date et l'heure de postage d'un message.
En faisant un essai, l'affichage de la date et de l'heure sont correctes, mais le positionnement des valeurs est le suivant :
10 17:15:23-05-2005
au lieu de :
10-05-2005 17:15:23
Dans mon formulaire de saisie, j'ai ceci :
ce qui a l'air correct puisque ça fonctionne.
Dans mon formulaire global, j'ai récupéré ceci pour le formatage des dates en français :
Code : Tout sélectionner
<?
while($valeurlud = @mysql_fetch_array($sql))
{
list($a,$m,$j)=explode("-",$valeurlud["date"]);
$date="$j-$m-$a";
?>
code qui était à l'origine prévu uniquement pour afficher la date, mais que je n'arrive pas à compléter correctement pour afficher également l'heure.
Un petit coup de main ?
Merci.
Publié : 10 mai 2005, 18:25
par PsyDk
Attention aux dates écrites en condensé dans l'ordre jour, mois, année : utilise plutôt « / » comme séparateur (jj/mm/aaaa). Le tiret est à réserver pour les dates au format ISO (aaaa-mm-jj).
Code : Tout sélectionner
$strIsoDate = $valeurlud["date"];
list($year, $month, $dayAndTime) = explode('-', $strIsoDate);
list($day, $time) = explode(' ', $dayAndTime);
$strMyDate = "$day/$month/$year $time";
Publié : 10 mai 2005, 18:25
par chBok
Vi vi vi, je vais répondre :
Alors, analyse de ton problème, le champ Mysql que tu utilises est au format DATETIME... les données y sont enregistrées sous la forme "
YYYY-MM-DD HH:MM:SS"
list($a,$m,$j) = explode('-', "YYYY-MM-DD HH:MM:SS"); donne :
* $a = YYYY
* $m = MM
* $j = DD HH:MM:SS
Quand tu veux remettre dans l'ordre, tu obtiens ton affichage indésirable :
DD HH:MM:SS-MM-YYYY
CQFD

Bref, faire simple. La requête MYSQL peut contenir la conversion du type dans le bon format d'affichage. Si tu ne veux qu'un affichage en DD-MM-YYYY, il te suffit de faire
C'est bien mieux !
Publié : 10 mai 2005, 18:29
par PsyDk
Ah oui, pas mal l'idée de faire bosser le moteur de base de données

Publié : 10 mai 2005, 18:39
par Invité
Entre les réponses, j'ai essayé ceci :
Code : Tout sélectionner
<?
while($valeurlud = @mysql_fetch_array($sql))
{
list($a,$m,$j)=explode("-",$valeurlud["date"]);
$date="$j-$m-$a";
list($h,$i,$s)=explode(":",$valeurlud["date"]);
$date="$h:$i:$s";
?>
Le jour et l'heure ne sont plus mélangés, mais j'ai ceci qui s'affiche, toujours au format américain :
2005-05-10 18:30:56
Publié : 10 mai 2005, 18:40
par Nerva
Entre les réponses, j'ai essayé ceci :
Code : Tout sélectionner
<?
while($valeurlud = @mysql_fetch_array($sql))
{
list($a,$m,$j)=explode("-",$valeurlud["date"]);
$date="$j-$m-$a";
list($h,$i,$s)=explode(":",$valeurlud["date"]);
$date="$h:$i:$s";
?>
Le jour et l'heure ne sont plus mélangés, mais j'ai ceci qui s'affiche, toujours au format américain :
2005-05-10 18:30:56
Publié : 10 mai 2005, 19:00
par Nerva
PsyDk
Je n'arrive pas à adapter ton code à ma page...

Publié : 10 mai 2005, 19:11
par Nerva
ChBok
Oui, quand j'exécute cette requête :
directement de MySql, ça fonctionne correctement... mais j'en fais quoi du résultat ?
Je suis très très débutant en PHP...
Publié : 10 mai 2005, 19:24
par chBok
Nerva a écrit :Entre les réponses, j'ai essayé ceci :
Code : Tout sélectionner
while($valeurlud = @mysql_fetch_array($sql))
{
list($a,$m,$j)=explode("-",$valeurlud["date"]);
$date="$j-$m-$a";
list($h,$i,$s)=explode(":",$valeurlud["date"]);
$date="$h:$i:$s";
Le jour et l'heure ne sont plus mélangés, mais j'ai ceci qui s'affiche, toujours au format américain :
2005-05-10 18:30:56
Bon, si tu tiens à ton code, et ne faire que recopier sans comprendre, voilà....
Code : Tout sélectionner
while($valeurlud = @mysql_fetch_array($sql))
{
list($date, $heure) = explode(' ', $valeurud);
list($a, $m, $j) = explode('-', $date);
list($h, $i, $s) = explode(' ', $heure);
$date = "$j-$m-$a";
$date.= "$h:$i:$s"; //notez le . devant le = !
...
}
ou mieux, avec une regex, en une ligne :
Code : Tout sélectionner
$date = preg_replace("/(\w{4})-(\w{2})-(\w{2}) (\w{2}):(\w{2}):(\w{2})/i", "\${3}-\${2}-\${1} \${4}:\${5}-\${6}", $valeurud);
Menfin, le tout est que tu comprennes ce que l'on t'explique et adapter selon tes besoins (le dernier cas ci-dessus n'est vraiment pas le mieux, car long en terme d'exécution)
Publié : 10 mai 2005, 19:29
par Nerva
Ben si, je veux chercher à comprendre, mais je me mélange les pinceaux ; par exemple, je viens seulement d'apprendre que l'heure était tirée du jour, d'où confusion !!!
Parlons-en, du "." ! Il sert à quoi ? Parce qu'il figure également dans une de mes lignes :
Code : Tout sélectionner
$query .= "VALUES('', '$messageID', '$expediteurID', '$Date')";
Publié : 10 mai 2005, 19:52
par chBok
Nerva a écrit :Parlons-en, du "." ! Il sert à quoi ? Parce qu'il figure également dans une de mes lignes :
Bon, je t'aide une dernière fois... Mais après, je te renvois à la pêche aux informations sur des sites spécialisés tels que
http://www.nexen.net/ que j'apprécie particulièrement pour le PHP !
Pour comprendre le
".", essaie ce code, et tu comprendras tout seul :
Code : Tout sélectionner
<?
$sujet = "Mon";
$nom = "tailleur";
$verbe = "est";
$adj = "riche";
echo $sujet.' '.$nom.' '.$verbe.' '.$adj;
?>
Publié : 10 mai 2005, 20:54
par Nerva
ChBok
Bon, dans ton code, si j'ai bien compris, ça suppose deux champs distincts : date et heure ?
Code : Tout sélectionner
while($valeurlud = @mysql_fetch_array($sql))
{
list($date, $heure) = explode(' ', $valeurud);
list($a, $m, $j) = explode('-', $date);
list($h, $i, $s) = explode(' ', $heure);
$date = "$j-$m-$a";
$date.= "$h:$i:$s"; //notez le . devant le = !
...
}
parce que tel quel, il ne fonctionne pas ; j'ai ça qui s'affiche :
a écrit le --::
Publié : 10 mai 2005, 21:06
par chBok
Argh, nan, il n'y a pas deux champs, et en plus, je viens de voir deux erreurs dans mon scripts....
J'ai supposé sur ta requête mysql était faite sur un champ
DATETIME (YYYY-MM-DD HH:MM:SS, et non au format DATE) que j'appelerai arbitrairement 'date'. La requête corrigée :
Code : Tout sélectionner
$sql = mysql_query("SELECT champ1, champ2, ..., date, champn FROM table"); //Ceci est un exemple non fonctionnel !
while($valeurlud = @mysql_fetch_array($sql)) //$valeurud contient un tableau des résultats
{
list($date, $heure) = explode(' ', $valeurud['date']); //lit la valeur 'date' du tableau, séparant les dates des heures
list($a, $m, $j) = explode('-', $date); //On sépare les jours, mois et année
list($h, $i, $s) = explode(':', $heure); //On sépare les composants horaires (oublie du :)
$date = "$j-$m-$a"; //je recompose la date au format français
$date.= "$h:$i:$s"; //notez le . devant le = !
...
}
Je précise que ce code ne doit servir qu'à la compréhension, car il n'est absolument pas optimisé, et en plus, il est très laid

Publié : 10 mai 2005, 21:12
par Nerva
Ben oui, c'est bien un champ datetime que j'utilise !
Publié : 10 mai 2005, 21:20
par Nerva
Je viens de faire un nouvel essai et j'ai toujours ça qui s'affiche --:: mais les données sont correctement enregistrées dans la table...