Forum Clubic

[PHP] - Changer le format d'une date - 2005-01-01 en 01 janvier 05

Voilà je chope dans ma BDD une date à ce format : 2005-01-01

Je voudrais l’afficher ensuite dans ma page sous un autre formart, comme 1er janvier 05, ou 01 janv 05… qqch dans ce style.

J’ai parcouru divers fonctions sur le site de php mais rien trouvé qui correponde. Mais bon comme je connais mal je cherche au pif…

Merci d’avance :slight_smile:

en créant une petite fonction utilisant substr pour découper ta date

http://fr.php.net/substr

Arf ca me parait compliqué ca… j’aurais pensé qu’ily avait un truc genre :

function (‘format initial’,‘format converti’)…

Et explode() ne permet pas de s’en sortir éventuellement ?

ereg -> mktime -> strftime

moi j’en ai codé une :oui: …


// permet d'interformater des dates
// ex : format_date("dd/mm/yyyy","yyyy-mm-dd","14/04/2004");
// retourne "2004-04-14"
function format_date($pat_input,$pat_output,$date,$delimIn="-",$delimOut="-", $default_date_size=3)
{
  // récupération du délimiteur d'entrée
  // premier caractère dont le code ASCII est < 65 (A)
  for($k=0; $k < strlen($pat_input); $k++)
  {
    if( ord($pat_input[$k]) < ord("A") )
    {
      $delimIn = $pat_input[$k];
      break;
    }
  }

  // récupération du délimiteur de sortie
  // premier caractère dont le code ASCII est < 65 (A)
  for($k=0; $k < strlen($pat_output); $k++)
  {
    if( ord($pat_output[$k]) < ord("A") )
    {
      $delimOut = $pat_output[$k];
      break;
    }
  }

  $aInput = explode($delimIn,$date);
  $aPatInput = explode($delimIn,$pat_input);
  $aPatOutput = explode($delimOut,$pat_output);
  $aOutput = array();

  if( !is_array($aInput) || ( count($aInput) != $default_date_size) )
    return null;

  for($k=0; $k < count($aPatInput); $k++)
  {
    $sPat = $aPatInput[$k];
    $iIndex = array_search($sPat,$aPatOutput);
    $aOutput[$iIndex] = $aInput[$k];
  }

  ksort($aOutput);
  return implode($delimOut,$aOutput);
}

c’est un code qu’à ~2 ans, donc ça vaut ce que ça vaut, c’est surement buggué et optimisable à mort vu que ça n’as pas été testé dans tous les sens, mais pour l’instant ça fait ce que je lui demande, alors on ne juuuugggeeeeee pas :smiley:

mais pendant longtemps, je faisais ça à base d’explode en effet, et plus récemment à base de preg :jap: …
c’est plus rigolos les preg, et pis les n00bs ils ont comprennent keudal :ane: …

Ouf ^^

J’avoue j’y comprends rien :smiley:

Finalement AAAA-MM-JJ c pas si mal :smiley:

PS : si ca se trouve mysql permet de faire ca directement dans ma requête non ?

ça gere pas les heure et les secondes …

spa grave je veux que la date ^^

mais tu les rentres avant ces données ? car quand tu remplies ta table, tu peux choisir le format :neutre:

Ah vouais remarque c’est pas con ca ^^ en fait j’étais arrivé avec ce format à la base et comme j’arrivais pas trop autrement j’ai pas modifié.

Je vais plancher là dessus, ca sera en effet bien plus simple de modifier directement la source :slight_smile:

EDIT: merci ^^

Et avec ça ?

Euh… j’avoue c’est obscur ce bazar pour moi ^^

Je peux pas plus simplement convertir le type de ma colonne date ?

Ben c’est les fonctions de conversion de mySQL, c’est tout.
Certes pour avoir du Janv, ça marchera pas si les locales françaises sont pas activées, mais bref…

Vouais j’avais bien compris, mais je capte pas trop comment implémenter ca dans ma requête… tu sais suis encore un noob :smiley:

Si j’ai :

SQL
[color=blue;font-weight:bold]SELECT[/color] date,nom,idDossier from dossier,users where dossier.idDossier = users.idDossiers

Comment je fais ton machin sur date ?

Si j’ai bien compris la question, en 2 lignes :


$madate='2005-06-15';

$moisFrench=array(1=>'Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Aoüt','Septembre','Octobre','Novembre','Décembre');
$newDate=date("d",strtotime($madate)).' '.$moisFrench[date("n",strtotime($madate))].' '.date("Y",strtotime($madate));

echo $newDate; // Retournera 06 Juin 2005

euh … un strftime("%B", $tontime); avec un setlocale(“fr”, LC_TIME) avant, c’est pas plus simple ? :oui:

Si, ça serait plus simple, mais il me semble que setlocale ne fonctionne pas systématiquement, notemment sous Windows, donc j’évites, autrement, c’est sûr que ce serait faisable en encore plus court.

SELECT DATE_FORMAT(date, '%d %M %Y'),nom,idDossier from dossier,users where dossier.idDossier = users.idDossiers

Je préfère toujours faire faire à MySQL tout ce qu’il est capable de faire. D’ailleurs pour info il est très déconseiller de récupérer une date depuis un champ date et de la traiter comme une chaîne, ça pose des problèmes lorsqu’on change de version de MySQL (4.0 à 4.1 par exemple, le format par défaut change et les scripts sont incompatibles…).

SQL
[color=blue;font-weight:bold]SELECT[/color] DATE_FORMAT(dossiers.Date,'%d.%m.%Y') AS DateFormat, Date, dossiers.idDossier, dossiers.codeDossier, dossiers.MarqueurD, clients.Nom FROM dossiers, clients WHERE dossiers.idClient = clients.idClient

Ca fonctionne, je vois pas trop pour get_format, et puis ca semble pas le faire causer en français donc ca ira bien en numérique je pense :slight_smile:

Merci à vous tous une nouvelle fois !

(sympa la colorisation syntaxique)