Date en Français

labourette Messages postés 657 Date d'inscription   Statut Membre Dernière intervention   -  
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   -
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 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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   Statut Membre Dernière intervention   6
 
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 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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   Statut Membre Dernière intervention   6
 
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 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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   Statut Membre Dernière intervention   143
 
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   Statut Membre Dernière intervention   6
 
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 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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   Statut Membre Dernière intervention   6
 
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 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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   Statut Membre Dernière intervention   6
 
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 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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