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 :

[DateTime] Problème avec __construct() => BUG PHP


Sujet :

Langage PHP

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut [DateTime] Problème avec __construct() => BUG PHP
    Salut à tous,
    Bon je vais la faire courte.
    Config : debian squeeze avec PHP 5.3.18 (last stable)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    date_default_timezone_set ('Europe/Paris');
    $str = '10/11/2012';
    try {
            $date = new DateTime($str);
            echo $date->format('Y-m-d');
    } catch (Exception $e) {
            echo $e->getMessage();
    }
    ?>
    Affiche
    Woot.

    Mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    date_default_timezone_set ('Europe/Paris');
    $str = '19/11/2012';
    try {
            $date = new DateTime($str);
            echo $date->format('Y-m-d');
    } catch (Exception $e) {
            echo $e->getMessage();
    }
    ?>
    affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DateTime::__construct(): Failed to parse time string (19/11/2012) at position 0 (1): Unexpected character
    Je me suis dis : C'est un... C'est un... BUG PHP??! J'étais en 5.3.2 et j'ai upgradé mon serv en 5.3.18 => Le problème persiste.
    Sur mon poste de dev je suis sous Windows 7 php 5.3.14 et fait pareil.

    Google ne m'a pas dépanné, et du coup je sais pas, je sais plus... Ca fait pareil chez vous?
    Vous auriez pas des idées pour contourner le problème (l'initialisation avec le timestamp, ou avec une chaine commencant par '@' suivie du timestamp donne la même erreur...)

    Merci!
    Stay in Bed .. Save Energy

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Bon c'est un problème de format.

    dd/mm/yyyy ne fait pas partie des formats reconnus listés ici => http://php.net/manual/en/datetime.formats.date.php

    Il doit prendre mon "jour" pour un "mois" et plante donc au-dessus de 12.

    Du coup je pose la question : Quelle est la méthode la plus rapide pour initialiser un objet DateTime avec une date donnée, au format chaine "dd/mm/yyyy"???

    2 heures de prises de tête sur ce truc... La France c'est tellement relou.
    Et dire que j'ai mis que 30 minutes à lui faire afficher que today on est le Duodi, 2 Frimaire CCXXI, j'ai la rage.
    Stay in Bed .. Save Energy

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Donc je répond à mon post :
    Il faut utiliser DateTime::createFromFormat qui renvoie un DateTime, et non le constructeur de DateTime.
    La manuel => http://www.php.net/manual/fr/datetim...fromformat.php

    Le code qui marche pour nous autres, Français :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    date_default_timezone_set ('Europe/Paris');
    $str = '20/11/2012';
    try {
            $date = DateTime::createFromFormat('d/m/Y', $str);
            echo $date->format('Y-m-d');
    } catch (Exception $e) {
            echo $e->getMessage();
    }
    affiche bien 2012-11-20

    /resolved
    Stay in Bed .. Save Energy

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

Discussions similaires

  1. [MySQL] Problème avec le fichier fonction.php
    Par cbirou dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/12/2009, 15h54
  2. Problème avec le include_path du php.ini
    Par juanYves dans le forum Apache
    Réponses: 3
    Dernier message: 24/07/2009, 18h49
  3. [ODBC] Un problème avec une reqête sous PHP
    Par zackrel dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 15/05/2006, 12h09
  4. Problème avec les variables en PHP
    Par King_T dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2006, 23h46
  5. Problème avec RDB$DATABASE et PHP
    Par Darkdaemons dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 16/01/2006, 14h53

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