Optimisation de fonction : conversion de date
Bonjour,
Je cherche à convertir une date de format jj-MMM-aa (mois en 3 lettres) au format jj-mm-aa (mois en chiffres). Ce code n'est pas du tout optimisé, il y a des vérifs de partout, je cherche d'abord à le dégrossir.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
$date_pmv = '25-NOV-09';
if (preg_match( '`^\d{1,2}-[A-Z]{3}-\d{1,2}$`' , $date_pmv )) { // si au format jj-MMM-aa avec le mois en 3 lettres
echo "Date : $date_pmv<br>";
$date = explode ("-", $date_pmv);
$jour = $date[0];
$mois = $date[1];
$an = $date[2];
echo "jour = $jour-$mois-$an<br>";
$mois_dispo = array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
if (in_array($mois, $mois_dispo)) {
echo "mois $mois est dans tab : position n°";
switch ($mois) {
case 'JAN' :
$mois_num = '01';
echo "$mois_num";
break;
case 'FEB' :
$mois_num = '02';
echo "$mois_num";
break;
case 'MAR' :
$mois_num = '03';
echo "$mois_num";
break;
case 'APR' :
$mois_num = '04';
echo "$mois_num";
break;
case 'MAY' :
$mois_num = '05';
echo "$mois_num";
break;
case 'JUN' :
$mois_num = '06';
echo "$mois_num";
break;
case 'JUL' :
$mois_num = '07';
echo "$mois_num";
break;
case 'AUG' :
$mois_num = '08';
echo "$mois_num";
break;
case 'SEP' :
$mois_num = '09';
echo "$mois_num";
break;
case 'OCT' :
$mois_num = '10';
echo "$mois_num";
break;
case 'NOV' :
$mois_num = '11';
echo "$mois_num";
break;
case 'DEC' :
$mois_num = '12';
echo "$mois_num";
break;
default :
echo "pas converti";
break;
}
$nouvelle_date = "$jour-$mois_num-$an";
echo "<br>".$nouvelle_date;
} else echo "mois pas dans tab<br>";
} else "regexp KO"; |
Je voudrais savoir si on peut faire plus simple ou plus court, notamment pour éviter l'in_array() et le switch() : par exemple avec une fonction qui vérifierait les 3 lettres avec une possibilité de date(M), si NOV peut être un date(M) avec on renvoie son équivalent date(m). C'est possible ça ? Je ne vois pas trop comment faire...
Merci pour votre aide !