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 CreateFromFormat millisecondes optionnelles [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut DateTime CreateFromFormat millisecondes optionnelles


    Quelqu'un saurait-il comment demandé à DateTime::CreateFromFormat d'ignorer les millisecondes si elles ne sont pas présentes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    DateTime::CreateFromFormat("Y-m-d H:i:s.u","2014-01-01 14:15:00"); // renvoit null
    DateTime::CreateFromFormat("Y-m-d H:i:s.u","2014-01-01 14:15:00.0"); // renvoit un DateTime

    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En 2 temps : tu testes une fois avec et une fois sans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $stringDate = "2014-01-01 14:15:00";
    // on essaye avec les millisecondes
    $dateTime = DateTime::CreateFromFormat("Y-m-d H:i:s.u", $stringDate); 
    var_dump($dateTime);
    if ($dateTime === false) {
    	// on essaye sans les millisecondes :
    	$dateTime = DateTime::CreateFromFormat("Y-m-d H:i:s", $stringDate);
    }
    var_dump($dateTime);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Ou on peut aussi adapter le format en fonction de la date. Ici on pourrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $date = "2014-01-01 14:15:21.0";
    $format = strpos($date,'.') != false ? "Y-m-d H:i:s.u" : "Y-m-d H:i:s";
     
    $date = DateTime::CreateFromFormat($format,$date);
     
    echo $date->format('Y-m-d H:i:s.u');

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Ah...

    J'espérais un truc super sioux dans la chaîne de format pour rendre la fin optionnelle (un peu comme dans une regexp )


    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    On peut rendre la fin optionnelle avec le '+'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $date = "2014-01-01 14:15:21.5";
    $format = "Y-m-d H:i:s+";
     
    $date = DateTime::CreateFromFormat($format,$date);
     
    echo $date->format('Y-m-d H:i:s.u');
    mais dans ce cas les microsecondes seront toujours ignorées.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/08/2014, 16h45
  2. DateTime sans les millisecondes
    Par Bono_BX dans le forum Développement
    Réponses: 5
    Dernier message: 05/06/2013, 12h55
  3. Parsexact de DateTime avec millisecond
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 18/11/2009, 19h16
  4. [XSD] xs:dateTime en millisecondes
    Par BiM dans le forum Valider
    Réponses: 1
    Dernier message: 06/05/2009, 17h43
  5. Réponses: 17
    Dernier message: 08/04/2008, 16h42

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