[Résolu] Date et heure correctes, mais mal positionnées

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Nerva
Lézard à collerette
Messages : 219
Inscription : 01 oct. 2004, 15:19

[Résolu] Date et heure correctes, mais mal positionnées

Message 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 :

Code : Tout sélectionner

$Date = date("Y-m-d H:i:s");
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.
PsyDk
Lézard à collerette
Messages : 317
Inscription : 23 sept. 2003, 09:41

Message 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";
Dernière modification par PsyDk le 10 mai 2005, 18:26, modifié 1 fois.
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message 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 :lol:

:idea: 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

Code : Tout sélectionner

SELECT DATE_FORMAT(champ_date, '%d-%m-%Y') FROM ...
C'est bien mieux !
PsyDk
Lézard à collerette
Messages : 317
Inscription : 23 sept. 2003, 09:41

Message par PsyDk »

chBok a écrit :

Code : Tout sélectionner

SELECT DATE_FORMAT(champ_date, '%d-%m-%Y') FROM ...
Ah oui, pas mal l'idée de faire bosser le moteur de base de données :)
Invité

Message 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
Nerva
Lézard à collerette
Messages : 219
Inscription : 01 oct. 2004, 15:19

Message 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
Nerva
Lézard à collerette
Messages : 219
Inscription : 01 oct. 2004, 15:19

Message par Nerva »

PsyDk
Je n'arrive pas à adapter ton code à ma page... :(
Nerva
Lézard à collerette
Messages : 219
Inscription : 01 oct. 2004, 15:19

Message par Nerva »

ChBok
Oui, quand j'exécute cette requête :

Code : Tout sélectionner

SELECT DATE_FORMAT(date, '%d-%m-%Y') FROM phpbb_livre;
directement de MySql, ça fonctionne correctement... mais j'en fais quoi du résultat ?

Je suis très très débutant en PHP...
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message 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)
Nerva
Lézard à collerette
Messages : 219
Inscription : 01 oct. 2004, 15:19

Message 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')";
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message 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;
?>
Nerva
Lézard à collerette
Messages : 219
Inscription : 01 oct. 2004, 15:19

Message 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 --::
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message 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 :o
Nerva
Lézard à collerette
Messages : 219
Inscription : 01 oct. 2004, 15:19

Message par Nerva »

Ben oui, c'est bien un champ datetime que j'utilise !
Nerva
Lézard à collerette
Messages : 219
Inscription : 01 oct. 2004, 15:19

Message 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...
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité