Fonction date en Français

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 12 août 2016 à 14:11
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 13 août 2016 à 21:52
Bonjour,
je souhaiterai pouvoir afficher une date dans ce format..
vendredi 12 Août 2016
Avec ma fonction cela m'affiche
Vendredi 10 Octobre 2016, mais malheureusement le 10 Octobre est un lundi.
Pouvez-vous me dire s'ils vous plait ce qui ne va pas.
Je vous remercie pour votre aide.
function dateFR($date){
    preg_match ('`^(\d{4})-(\d{2})-(\d{2})(.*)$`', $date, $out);
    if($out[2] < 10) { $out[2] = substr($out[2],1,1); }
    $i = $out[2];
    $jours = array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
    $mois = array('','Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
    return $jours[date("w")].' '.$out[3].' '.$mois[$i].' '.$out[1].' '.$out[4];
}
A voir également:

4 réponses

Et demain si tu testes ta fonction, ça sera Samedi 10 Octobre 2016, et c'est normal car la fonction date(), si tu précises pas de Timestamp en second paramètres, il prendra la date du jour.

Du coup au lieu de faire ça:

date("w")


Essaye ça:

date("w", strtotime($out[3].'-'.$i.'-'.$out[1]))


Après quelques astuces pour améliorer ton code, déjà tu peux gagner une ligne avec ça:

if($out[2] < 10) { $out[2] = substr($out[2],1,1); }
$i = $out[2];


En changeant par:

$i = intval($out[2])


D'ailleurs une astuce pour tes codes plus tard, essaye les conditions ternaires, par exemple:

if($out[2] < 10) { $out[2] = substr($out[2],1,1); }
$i = $out[2];

//devient:
$i = ($out[2] < 10) ? substr($out[2],1,1) : $out[2];

//ça se construit comme ça:
$var = (cond) ? true : false;


Après évite de mettre un champs vide dans un tableau, essaye plutôt ça:

$mois = array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
//et $mois[$i] devient $mois[$i-1]
0
Utilisateur anonyme
12 août 2016 à 15:45
Après tu peux le faire en 2 lignes:

function dateFR($date){
setlocale(LC_TIME, "fr");
return ucwords(utf8_encode(strftime("%A %d %B %Y", strtotime(substr($date, 0, 10))))).' '.substr($date, 10);
}
0