[Resolu] php: changer le format de la date

  • Auteur de la discussion Auteur de la discussion h4ni
  • Date de début Date de début
WRInaute occasionnel
Bonjour
j'utilise un script php qui génère une liste des derniers articles dans un fichier xml , dans ce dernier j'ai la date de creation de l'article qui es sous forme de
<time>2008-04-09 00:00:00</time>
j'aimerai bien convertir cette date pour obtenir
<time>09-04-2008 00:00:00</time>
quelqu'un a une idée?

Merci d'avance
 
Nouveau WRInaute
voici un cheminement possible:

1ere etape : convertir en timestamp ta date (mktime)
2eme etape: afficher dans le format que tu souhaite (date ou strftime)
 
WRInaute accro
Un truc à base d'explode devrait faire ce que tu veux :

1) un premier explode sur la chaine "" pour récupérer la première partie de la date
2) un second explode sur la chaine "-" pour récupérer les trois parties de la date

Et ensuite tu recomposes le tout comme bon te semble.
 
WRInaute accro
Code:
function datefr($date_sql)
	{ 
 // Declaration du tableau des noms de jours en Francais 
  //-------- ici 
  
 $j_fr['Sunday'] = "Dimanche"; 
  $j_fr['Monday'] = "Lundi"; 
  $j_fr['Tuesday'] = "Mardi"; 
  $j_fr['Wednesday'] = "Mercredi"; 
  $j_fr['Thursday'] = "Jeudi"; 
  $j_fr['Friday'] = "Vendredi"; 
  $j_fr['Saturday'] = "Samedi"; 
  
  // Declaration du tableau des noms de jours en Francais 
  $m_fr['01'] = "Janvier"; 
  $m_fr['02'] = "Fevrier"; 
  $m_fr['03'] = "Mars"; 
  $m_fr['04'] = "Avril"; 
  $m_fr['05'] = "Mai"; 
  $m_fr['06'] = "Juin"; 
  $m_fr['07'] = "Juillet"; 
  $m_fr['08'] = "Aout"; 
  $m_fr['09'] = "Septembre"; 
  $m_fr['10'] = "Octobre"; 
  $m_fr['11'] = "Novembre"; 
  $m_fr['12'] = "Decembre"; 
  
  $la_date = explode(' ', $date_sql); // on decompose la date SQL 
  if (isset($la_date['1'])) $heure_sql= explode(':', $la_date['1']); // On prend la partie heure 
  $date_sql = explode('-', $la_date[0]); // On prend la partie date 
  
  
  if (substr($date_sql[2], 0, 1) == '0' ) // On verifie si le 1er caractere est 0 dans le numero du mois 
  { 
  // si oui alors on supprime le 1er caractere 
  $date_sql[2] = substr($date_sql[2], 1, strlen($date_sql[2]) -1); 
  } 
  
  if (isset($heure_sql[0])) $heure = $heure_sql[0]; // La variable de l'heure 
  if (isset($heure_sql[1])) $minutes = $heure_sql[1]; // La variable des minutes 
  if (isset($heure_sql[2])) $secondes = $heure_sql[2]; // la variable des secondes 
  
  $annee = $date_sql[0]; // La variable des annees 
  $num_mois = $date_sql[1]; // La variable du numero du mois 
  $nom_mois = $m_fr[$num_mois]; // La variable du mois en francais 
  $num_jour = $date_sql[2]; // Le numero du jour 
  if (($num_jour < 10) and ($num_jour > 0)) $num_jour="0".$num_jour;
  $nom_jour = $j_fr[date("l", mktime(0, 0, 0, $num_mois, $num_jour, $annee))];
// Le nom du jour en francais 
  
  //$date = "$nom_jour $num_jour $nom_mois $annee";
  $date = "$num_jour-$num_mois-$annee"; // On forme la date 
  if (isset($heure_sql[0]))  $heure = "à $heure:$minutes:$secondes"; // On forme l'heure 
  else $heure='';
  $date_fr=$date;
  if ($heure != '::') $date_fr= $date_fr.' '.$heure; 
  
  //retour de cette variable 
  return $date_fr; 
}

à adapter si tu veux le nom ou numéro de jour par exemple
 
Nouveau WRInaute
comme chacun y va de son code
Code:
setlocale (LC_TIME, "fr@euro");
$val = explode(" ",$my_date);
$date = explode("-",$val[0]);
$time = explode(":",$val[1]);
$timestamp=mktime($time[0],$time[1],$time[2],$date[1],$date[2],$date[0]);

strftime("%d %B %Y",$timestamp);

en 5 lignes tu as la meme chose.. et c'est multilingue tres facilement...
vive la fonction strftime (http://fr3.php.net/manual/fr/function.strftime.php)
 
WRInaute accro
disons que moi c'est la fonction "retourne moi la date complete en francais"

ex : "jeudi 12 Janvier 1967 à 8h32"
 
WRInaute accro
e-kiwi a dit:
disons que moi c'est la fonction "retourne moi la date complete en francais"

ex : "jeudi 12 Janvier 1967 à 8h32"

sauf qu'en utilisant LC_TIME, tu as possibilité de t'affranchir de tes tableaux de paramètrages, qui contiennent du coup le libellé du jour, du mois, etc.
 
Nouveau WRInaute
et ceci:
Code:
strftime("Le %A %d %B %Y a %Hh%M",$my_date);
ca fait le café? :twisted:

et du coup une classe Date est rapidement codée :P
 
WRInaute accro
steph2908 a dit:
et ceci:
Code:
strftime("Le %A %d %B %Y a %Hh%M",$my_date);
ca fait le café? :twisted:

et du coup une classe Date est rapidement codée :P

Sauf que ton strftime il nécessite au préalable de modifier la constante LC_TIME. Sinon ça affiche en anglais...

Par contre je préfère aussi procéder comme ça.
 
Nouveau WRInaute
UsagiYojimbo a dit:
Sauf que ton strftime il nécessite au préalable de modifier la constante LC_TIME. Sinon ça affiche en anglais...

évidemment mais le fichier de traduction pour chaque langue se limite a quelques lignes...
la LC_TIME et le (ou les) format de sortie désiré que l'on peut variabiliser ;)
 
WRInaute impliqué
Le explode consomme des ressources pour rien, vu que la chaine d'entrée fait toujours la même taille et on sait exactement où sont les informations (ex: année à partir du caractère 0 et sur 4 caractères)... substr()
 
WRInaute accro
vous m'expliquerai sur un mutualisé comment vous arrivez au même résultat que moi , avec une date en francais
 
WRInaute impliqué
Bonjour,

Je rebondis sur cette discussion, car je mets en place une api et j'ai un souci aves les dâtes sous PHP5

echo " DATE: ".echo " DATE: ".$expo->date."\n" ;
la variable me fournit directemement un affichage US
du type : Wed, 02 Apr 2008 23:15:17 GMT

Comment je peux manipuler $expo->date pour obtenir
un affichage français svp ?

J'ai bien essayé
// Définit le fuseau horaire par défaut à utiliser. Disponible depuis PHP 5.1
date_default_timezone_set('UTC');

sans résultats

merci
 
Discussions similaires
Haut