Date en Français

Fermé
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 12 janv. 2014 à 18:11
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 17 janv. 2014 à 12:13
Bonjour

J'ai récupéré une fonction qui me retourne la date de PhpmyAdmin au format Français cela fonctionne bien sauf si des dates de naissance ne sont pas renseigné dans ma BDD alors ça me retourne cette erreur

Notice: Undefined offset: 2 in C:..........................

je souhaiterai que les champs reste vide si il n'y a pas de date de naissance de renseigné dans ma BDD.

Pouvez-vous m'aider à corriger mon problème je vous met la fonction.
Un grand merci à vous

function dateFR($date_en_francais){
preg_match (''^(\d{4})-(\d{2})-(\d{2})(.*)$'', $date_en_francais, $out);
if($out[2]<10){$out[2]=substr($out[2],1,1);}
$i=$out[2];
$mois = array('','Janvier', 'Fevrier', 'Mars', 'Avril', 'Mai','Juin','Juillet', 'Aout', 'Septembre', 'Octobre','Novembre', 'Decembre');
return $out[3].' '.$mois[$i].' '.$out[1].' '.$out[4];
}
A voir également:

5 réponses

mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
12 janv. 2014 à 20:36
Bosnoir,

Sinon jai ça:

<?php
class DatesFr
{
    
    private $listeMois = array(
        '01' => 'janvier',      '02' => 'février',      '03' => 'mars',         
        '04' => 'avril',        '05' => 'mai',          '06' => 'juin',
        '07' => 'juillet',      '08' => 'août',         '09' => 'septembre',
        '10' => 'octobre',      '11' => 'novembre',     '12' => 'décembre',
    );
    
    public function dateSqlToFr($dateSql, $format='JJ/MM/AAAA') {
        list($annee, $mois, $jour) = explode('-', $dateSql);
        
        if($format=='JJ/MM/AAAA') {
            return $jour.'/'.$mois.'/'.$annee;
        } else if($format=='JJ mmm') {
            return $jour.' '.$this->listeMois[$mois];
        } else if($format=='JJ mmm AAAA') {
            return $jour.' '.$this->listeMois[$mois].' '.$annee;
        }
        // valeur de retour par défaut
        return $dateSql;
    }

}


A+


1
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
13 janv. 2014 à 00:08
Bonjour
Merci pour ta class, peux tu me dire comment je fait pour l'inclure dans mon tableau.
Je te remercie
<td><?php echo DatesFr($donnees['date_naissance']) ?></td>
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par mpmp93 le 13/01/2014 à 05:56
la classe esr dans un fichier du genre DatesFr.class.php, on fait ceci:

<?php
include "DatesFr.class.php";
$DatesFr = new DatesFr();


et plus loin:

....
echo $DatesFr->dateSqlToFr($donnees['date_naissance']); 
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
13 janv. 2014 à 10:25
Bonjour
Merci pour votre aide.
J'ai encore un petit soucie lorsque des champs ne sont pas renseigné dans ma BDD cela m'affiche cette erreur par contre sinon cla m'affiche bien 18/07/1958 mais j'aurai préféré
18 juillet 1958.
Merci

Notice: Undefined offset: 2
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par mpmp93 le 13/01/2014 à 11:26
Il faut utiliser l'option format="JJ mmm AAAA" comme ceci:

echo $DatesFr->dateSqlToFr($donnees['date_naissance'],"JJ mmm AAAA");


C'est pourtant assez évident dans le code de la fonction, non?

Concernant les dates "vides", il est assez facile de modifier le code pour ne rien afficher. Un test, un peu de IF.... je vais pas tout faire. Il faut aussi apprendre un peu.
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
12 janv. 2014 à 18:19
Salut,

Peut-être pourrais-tu contrôler tes variables ?

Rajouter des conditions pour voir ce qu'il y a dans $date_en_francais avant l'appel de ta fonction dateFR() ou contrôler le résultat de $out après l'appel à preg_match ()
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
16 janv. 2014 à 11:02
Bonjour
Merci pour votre aide, en fait j'ai changer dans ma BDD j'ai mis pour date de naissance par défault comme ça, lorsque aucune date n'est renseignée il y aura 00 00 0000 plus aucun problème.
Merci
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
16 janv. 2014 à 11:42
Mettre 00 00 0000 est fortement déconseillé....
Il faut mettre NULL ou une date.

Bon usage:

if (!empty($donnees['date_naissance'])) {
    echo $DatesFr->dateSqlToFr($donnees['date_naissance'],"JJ mmm AAAA");
}
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
16 janv. 2014 à 22:20
Bonjour
En fait en décochant NULL ça a l'air de fonctionner..
Ou il n'y a pas de date de naissance de renseignée ça affiche 00 00 0000.

Pourquoi il faut absolument mettre à NULL?
Merci
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par mpmp93 le 17/01/2014 à 10:06
Il faut éviter 0000-00-00 car certains frameworks ne gèrent pas CETTE DATE.

Par exemple, pour savoir si un événement a une date de fin, vous faites simplement:

...WHERE date_fin IN NOT Null

qui est 10x plus rapide en filtrage que

...WHERE date_fin > "0000-00-00"

Une date en 0000-00-00 risque également de poser problème pour un script faisant une conversion en timestamp. Bug assuré.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
17 janv. 2014 à 10:29
Bonjour
Merci très explicite votre réponse.
Je vais remodifier ma BDD.

J'ai ouvert un autre post sur une erreur que j'ai sur mon serveur car en local ça marche nickel peux tu me donner des explications concernant cette erreur ?
Merci

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
17 janv. 2014 à 12:13
C'est simple, vous "émettez" un ou plusieurs caractères avant de faire un session-start()

On ouvre une session UNE SEULE fois en début de script

BON:

<?php
session-start();
... etc....


MAUVAIS:

<?php
include 'db.inc.php';
session-start();
... etc....


erreur classique, le fichier includé est structuré comme ceci:

<?php
....code...
?>


le "caractère" parasite sera le retour ligne après ?>

A+
0