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 :

Objet de type DateTime mal initialisé [POO]


Sujet :

Langage PHP

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut Objet de type DateTime mal initialisé
    Bonjour,

    je me bats avec ce message d'erreur :
    Warning: DateTime::format(): The DateTime object has not been correctly initialized by its constructor in C:\wamp64\www\ticket2\Classes\Olivier\Ticket.php on line 96
    Voici comment est construit cet objet : je reçois une date ayant ce format : yyyy-mm-dd. Comme je veux vérifier le format de la date, j'ai crée pour cela une classe DateTimeCtrl qui hérite de la classe DateTime et à laquelle j'ai rajouté une méthode isValid :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <?php
    declare(strict_types=1);
    namespace Classes\Olivier;
    use DateTime;
     
    class DateTimeCtrl extends DateTime
    {
        private $date; // Datetime and format : yyyy-mm-dd
       /* Constructor */
        public function __construct($date)
        {
            $this->date=$date;
        }
     
        public function isValid():bool
        {
            function validateDate($date_to_control, $date, $format = 'Y-m-d')
            {
                $date_good_format = DateTime::createFromFormat('Y-m-d', $date_to_control);
                return $date_good_format->format($format) == $date;
            }
     
            $ctrl_date=new DateTime($this->date);
            return (!empty($this->date)&&validateDate($this->date,$ctrl_date));
        }   //end of isValid
     
     
    } //end class DatetimeCtrl
    Cette variable est ensuite transmise à une autre classe ainsi :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     $submitted_date = new DateTimeCtrl('2018-12-26');
     echo "valid_date:".($submitted_date->isValid())?TRUE:FALSE."<br/>";
     $last_resolved_date = new DateTime('2019-01-17');
     $tic1=new Ticket(1,'Phenix','PHENIX_WW_L3',$submitted_date,$last_resolved_date,'AR // Florida // Phenix // User unable to complete...',$priori1,$status1,$country2,$user1,$user2,$orga1,$inc_typ1,$rep_source1);
     $tic1->getAllData();

    La méthode getAllData de Ticket fait appel à une autre méthode de Ticket : self::getSubmittedDateValue :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function getSubmittedDateValue():string
        {
            return(($this->submitted_date)->format('Y-m-d'));
        }
    et le message d'erreur de ci-dessus porte sur la ligne 4 de cette méthode. Quelle peut être la raison ?
    A noter que je n'ai pas d'erreur si dans mon code, je remets le type DateTime à la place de DateTimeCtrl.

    Constructeur de Ticket :
    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
    16
    17
    18
    19
    20
     
    public function __construct(int $id,string $prd_name,string $assigned_grp,DateTimeCtrl $subm_date,Datetime $lr_date,string $summary,
    Priority $priority,Status $status,Country $country,User $submitter,User $customer,Organization $orga,IncidentType $inc_type,
    ReportedSource $rep_source)
    {
        $this->id=$id;
        $this->product_name=$prd_name;
        $this->assigned_group=$assigned_grp;
        $this->submitted_date=$subm_date;
        $this->last_resolved_date=$lr_date;
        $this->summary=$summary;
        $this->priority=$priority;
        $this->status=$status;
        $this->country=$country;
        $this->submitter=$submitter;
        $this->customer=$customer;
        $this->organization=$orga;
        $this->incident_type=$inc_type;
        $this->reported_source=$rep_source;
    }

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Laurent,

    la doc mon vieux, la doc !
    D'où tu me fais une usine à gaz pour vérifier la validité d'une date ?!!??
    Utilise : DateTime::createFromFormat()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $date = DateTime::createFromFormat('Y-m-d', $ta_date);
    if ($date === false) {
        // erreur, date mal formée
    }

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    En effet, c'est bien plus simple que ce que j'avais imaginé. Note que je m'étais déjà intéressé à cette méthode : https://www.developpez.net/forums/d2.../#post11354579 mais pas vu dans la doc que je pouvais l'utiliser simplement pour vérifier ma date...

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

Discussions similaires

  1. [PowerShell] problème de calcul sur les objets de type datetime
    Par philpus256 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 21/04/2017, 17h09
  2. [Sérialisation] d'objets de types différents
    Par Amnesiak dans le forum Général Java
    Réponses: 3
    Dernier message: 08/12/2004, 22h28
  3. DB objet sous types heritage
    Par smex dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 15/06/2004, 21h58
  4. requete vers une colonne de type datetime
    Par Zorgz dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/12/2003, 12h37
  5. utilisation de "LIKE" avec un type datetime dans r
    Par ericmart dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/11/2003, 14h58

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