[RESOLU] Changer le format d'une date

Petit nouveau ! | 7 Messages

26 août 2014, 10:03

Bonjour,

J'ai une BDD ou je dois enregistré une une date au format 'Année-Mois-Jour'.
L'utilisateur lui, me donne une date au format français ou anglais.
Je dois donc gérer les formats 'Jour-Mois-Année' et 'Mois-jour-Année' et les reformater au format 'Année-Mois-Jour' pour la BDD.

Voici mon code qui fonctionne mais qui fait un peu bricologe, car je met dans la variables $newDate le format('Y-d-m') alors que la date est enregistré en BDD au format Y-m-d.
$date = str_replace('/', '-', $date); // On remplce les '/' par des '-' car php ne gère pas bien les '/'
 
if($this->_dateFormat == 'jj-mm-aaaa'){
      $newDate = new DateTime($date);
      $newDate = $newDate->format('Y-m-d');
 
      return $newDate;
    }
    else if($this->_dateFormat == 'mm-jj-aaaa'){
      $newDate = new DateTime($date);
      $newDate = $newDate->format('Y-d-m');
      return $newDate;
    }
Existe t'il un moyen plus propre?

Mammouth du PHP | 571 Messages

26 août 2014, 15:10

bonjour,

tu peux d'abord détecter le format saisi par l'utilisateur puis valider cette date en fonction du format attendu
<?php

$date="26-08-2014";

$patternFr ='#(^0[1-9]|^[1-2][0-9]|^3[0-1])-(0[1-9]|1[0-2])-([0-9]{4})$#';
$patternUs ='#(^[0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$#';


if( preg_match($patternFr, $date)){
   $dateValide = DateTime::createFromFormat("d-m-Y", $date);
}else
  if( preg_match($patternUs, $date)){
    $dateValide = DateTime::createFromFormat("Y-m-d", $date);
  }
else{
  echo "date ivalide<br>";

}


echo "date valide en aaaa-mm-jj =",$dateValide->format('Y-m-d');
?>

Petit nouveau ! | 7 Messages

27 août 2014, 16:14

Merci ça fonctionne

Petit nouveau ! | 1 Messages

17 avr. 2015, 07:45

Alors voilà je suis en train de crée un petit framework en mvc pour un projet et je voulais faire une class model qui ressemble à celle de cakephp 3 car je trouve la façon de faire une requête pas mal.