IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Conversion format date


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 388
    Points : 209
    Points
    209
    Par défaut Conversion format date
    Bonjour,

    Je récupère d'un site distant des dates soit au format JJ/MM/AAAA (ex 05/07/2011), soit au format MM/AAAA (ex 07/2011), soit au format AAAA (ex 2011). Je voudrais tester le format de la date que je récupère :

    - si le format est JJ/MM/AAAA, je ne fais aucun traitement,
    - si le format est MM/AAAA, je voudrais le "convertir" en 01/MM/AAAA,
    - si le format est AAAA, je voudrais le "convertir" en 01/01/AAAA.

    Merci de votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Il existe peut-être des fonctions qui font cela (bien que je doute que ca detecte le format d'entrée).

    Cependant pourquoi ne pas jouer sur la longueur de la chaine récupérée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    switch(strlen($chaine))
    {
       case 4: // Si seulement l'année
            $newChaine = "01/01/".$chaine
            break;
       case 7:
            $newChaine = "01/".$chaine
        // etc
    }

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fais un DateTime::createFromFormat sur chaque type de date, si c'est pas bon il renvoie false

  4. #4
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Bonjour,

    Citation Envoyé par stealth35
    fais un DateTime::createFromFormat sur chaque type de date, si c'est pas bon il renvoie false
    Le problème c'est que cela ne lui renverra que "faux" si il n'a que l'année et ne lui créera pas sa date.

    Citation Envoyé par bob633
    Cependant pourquoi ne pas jouer sur la longueur de la chaine récupérée.
    Je pense qu'il serrait préférable de jouer sur le nombre d’élément d'un explode non ?

    C'est en tout cas ce que j'aurais fait :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    $date = '02/2012';
    $test = explode('/', $date);
    switch(count($test)){
    case 1:
        $dateFinale = "01/01/" . $date;
        break;
    case 2:
        $dateFinale = "01/" . $date;
        break;
    case 3:
        $dateFinale = $date;
        break;
    }
    ?>

    Edit : Au temps pour moi stealth35, j'ai lu ton message trop vite ...

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $formats = array('d/m/Y', 'd/Y', 'Y');
    $dates = array('04/04/2012', '04/2012', '2012');
     
    foreach ($dates as $date) {
        foreach ($formats as $format) {
            if ($datetime = DateTime::createFromFormat($format, $date)) {
                var_dump($datetime->format('d/m/Y'));
            }
        }
    }
    /*
    string(10) "04/04/2012"
    string(10) "04/04/2012"
    string(10) "04/04/2012"
    */

    bon par contre il garde le jour et le mois en cours, mais c'est normale c'est que retournerai strtotime()

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 388
    Points : 209
    Points
    209
    Par défaut
    Merci à tous pour vos propositions Comme je ne souhaite pas me baser sur le jour ou le mois en cours, je ne retiendrais pas la solution de stealth35. La solution de humitake répond à mes attentes (je n'ai pas testé la solution de bob633 mais elle doit aussi fonctionner). On m'a suggéré par ailleurs une solution alternative qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $date = '09/2010';
    echo str_pad($date,10,'01/', STR_PAD_LEFT);
    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion format date
    Par charliejo dans le forum C#
    Réponses: 4
    Dernier message: 12/01/2009, 23h52
  2. conversion format dates
    Par NATOU2 dans le forum VBA Access
    Réponses: 7
    Dernier message: 23/01/2008, 10h02
  3. Conversion format Date
    Par toune84 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 09/12/2007, 20h23
  4. CONVERSION FORMAT DATE SPECIAL
    Par plutonium719 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/11/2007, 09h49
  5. Conversion format Date
    Par Swaks dans le forum DB2
    Réponses: 1
    Dernier message: 09/11/2006, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo