Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

gérer plusieurs formats de date


Sujet :

Langage PHP

  1. #1
    Membre expert
    gérer plusieurs formats de date
    Bonjour,
    je dois manipuler une date. Celle-ci a plusieurs formats possibles mais je ne le connais pas d'avance. Pour gérer cela, je suis parti sur l'approche suivante, mais il est clair que c'est moche. Comment améliorer ça ?

    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function getDateSql($date) {
        // possible formats : M d, Y ou M d Y ou M d ou M-d
            $date1 = \DateTime::createFromFormat('M d, Y', $date);
            if ($date1==false) {$date1=\DateTime::createFromFormat('M d Y', $date);}
            if ($date1==false) {
                {$date1=\DateTime::createFromFormat('M d', $date);}
                if ($date1==false) {$date1=\DateTime::createFromFormat('M-d', $date);}
                }
             if ($date1!=false) return( $date1->format('Y-m-d H:i:s'));
             else return(false);
        }
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  2. #2
    Membre expert
    J'ai un peu simplifié la fonction, mais je pense qu'on peut faire beaucoup mieux :
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function getDateSql($date,$util_contain) {
        // possible formats : M d, Y ou M d Y ou M d ou M-d ou M,d
            if ($util_contain->contains("Earlier",$date)) $date='Dec-18';
            $date1 = \DateTime::createFromFormat('M d, Y', $date);
            if ($date1==false) { $date1=\DateTime::createFromFormat('M d Y', $date);}
            if ($date1==false) { $date1=\DateTime::createFromFormat('M d', $date);}
            if ($date1==false) {$date1=\DateTime::createFromFormat('M-d', $date);}
            if ($date1==false) {$date1=\DateTime::createFromFormat('M,d', $date);}
     
            if ($date1!=false) return( $date1->format('Y-m-d H:i:s'));
            else return(false);
        }

    La méthode contains sert à détecter la présence d'une chaîne de caractères (j'ai créé une classe utilFct)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  3. #3
    Modérateur

    salut,

    comme ça :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function getDateSql($date)
    {
        $formats = ['M d, Y', 'M d Y', 'M d', 'M-d'];
        foreach ($formats as $f) {
            $d = \DateTime::createFromFormat($f, $date);
            if ($d !== false) {
                return $d->format('Y-m-d H:i:s');
            }
        }
        return false;
    }

  4. #4
    Membre expert
    génial
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell