Bug dans fonction simple [Résolu]

Signaler
Messages postés
15
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
19 janvier 2010
-
Messages postés
15
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
19 janvier 2010
-
Bonjour,

J'ai un petit soucis avec une fonctions que j'ai créé.

Cette fonction me permet de traduire une date stocké en BDD en date "lisible"

Mon format en base : 20101010 AAAAMMJJ

Mon format "lisible" : 10 Octobre 2010

Le problème c'est que pour le mois de Septembre et d'aout ma fonction affiche un 09 ou un 08 à la place d'un Septembre ou d'un Aout.

Voici ma fonction:

    <?php

    function base_to_date($date)
    {
    //format date dentree -> 20101231
    $date_jour = substr($date, -2);
    $date_annee = substr($date, 0, -4);
    $date_mois = substr($date, -4, -2);

    switch($date_mois)
    {
    case 01: $date_mois = "Janvier"; break;
    case 02: $date_mois = "Février"; break;
    case 03: $date_mois = "Mars"; break;
    case 04: $date_mois = "Avril"; break;
    case 05: $date_mois = "Mai"; break;
    case 06: $date_mois = "Juin"; break;
    case 07: $date_mois = "Juillet"; break;
    case 08: $date_mois = "Août"; break;
    case 09: $date_mois = "Septembre"; break;
    case 10: $date_mois = "Octobre"; break;
    case 11: $date_mois = "Novembre"; break;
    case 12: $date_mois = "Décembre"; break;
    }

    //format sortie -> 31 Décembre 2010
    return $date = $date_jour." ".$date_mois." ".$date_annee;
    }

    echo base_to_date("20091009");

    ?>

4 réponses

Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
13
La solude aurait été:
switch($date_mois)
    {
    case '01': $date_mois = "Janvier"; break;
    case '02': $date_mois = "Février"; break;...

Mais autant chercher une meilleure méthode au lieu de ré-inventé l'eau chaude.
S.
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
13
Tu es en PHP4 ou >= 5.2.9 ? Si c'est 5.2.9 (ou 5.2.6, je ne sais plus), tu peux utiliser directement l'objet DateTime. Et 5.3 c'est Byzance car tu peux créer au format désiré.
S.
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Hello,

J'ai testé, chez moi j'ai le même problème. Je ne le comprends pas et donc je ne pourrais pas te dire pourquoi cela ne fonctionne pas. Celas-dis, j'ai résolu le problème en castant mon mois en INT :
<?php
//........
    $date_mois = (int)substr($date, -4, -2);
    switch($date_mois)
    {
        case 1: $date_mois = "Janvier"; break;
        case 2: $date_mois = "Février"; break;
        case 3: $date_mois = "Mars"; break;
        case 4: $date_mois = "Avril"; break;
        case 5: $date_mois = "Mai"; break;
        case 6: $date_mois = "Juin"; break;
        case 7: $date_mois = "Juillet"; break;
        case 8: $date_mois = "Août"; break;
        case 9: $date_mois = "Septembre"; break;
        case 10: $date_mois = "Octobre"; break;
        case 11: $date_mois = "Novembre"; break;
        case 12: $date_mois = "Décembre"; break;
    }
//........
?>

La ca fonctionne. Du coup ca doit être un problème de typage de données... Par contre ce que t'as dit syndrael est mieux...
_________________________________
Min iPomme
Messages postés
15
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
19 janvier 2010

Le problème venait du fait que les nombres commençant par un 0 sont sont considérés comme des nombres en octal. Or, les chiffres 8 et 9 n'existent pas dans cette base.

J'ai essayé de mettre des guillemets autour des tes nombres (ex: case "08") et ça marche.

Merci de votre aide.