Bug dans fonction simple

Résolu
enibib Messages postés 15 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 19 janvier 2010 - 18 janv. 2010 à 10:27
enibib Messages postés 15 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 19 janvier 2010 - 19 janv. 2010 à 11:30
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

syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 19
18 janv. 2010 à 11:22
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.
3
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 19
18 janv. 2010 à 10:46
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.
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
18 janv. 2010 à 11:11
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
0
enibib Messages postés 15 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 19 janvier 2010
19 janv. 2010 à 11:30
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.
0
Rejoignez-nous