Fonction date en Français [Résolu/Fermé]

Signaler
Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
-
Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
-
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];
}

4 réponses

Messages postés
1688
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
24 septembre 2018
882
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]
Messages postés
1688
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
24 septembre 2018
882
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);
}
Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
31
Bonjour
Je te remercie de ton aide, j'ai donc mis la fonction
function dateFR($date){
    setlocale (LC_TIME, 'fr_FR.utf8','fra');
    return ucwords(utf8_encode(strftime("%A %d %B %Y", strtotime(substr($date, 0, 10))))).' '.substr($date, 10);
}

en modifiant setlocal pour le français sinon c'étais en anglais. Mais maintenant les mois avec des accents ne passe pas.
Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
31
En fait j'ai gardé ma fonction avec ta modif que tu m'as proposé.
date("w", strtotime($out[3].'-'.$i.'-'.$out[1]))

et tout fonctionne comme je le souhaitais.
Je te remercie
Messages postés
1688
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
24 septembre 2018
882
Essaye de retirer utf8_encode pour le problème de caractère.
Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
31
Bonjour,
En fait tout est rentré dans l'ordre comme tu me l'a dit j'ai supprimé utf8_encode et nickel
MERCI