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 de date avec caractère T ? [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut Conversion de date avec caractère T ?
    Bonjour à tous,

    Je viens vers vous car j'ai un soucis pour convertir une date représentée d'une manière que je n'ai jamais traité :


    Exemple de date récupérée via une API CURL : 2019-07-31T08:01:54+02:00
    Comment convertir simplement cette date en : Jour/Mois/Année à Heure:Minutes:Secondes

    D'avance merci
    Bien à vous

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    si on en crois la DOC : date()

    ta date est bien formatée, au format "c" :
    • Date au format ISO 8601 (ajouté en PHP 5)
    • 2004-02-12T15:19:21+00:00

    Donc un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date2 = date('d/m/Y H:i:s', strtotime($date));

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 707
    Points : 43 789
    Points
    43 789
    Par défaut
    C'est un format connu et normalisé : le format ISO-8601.

    Tu devrais pourvoir t'en sortir avec strptime

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    Tout d'abord, merci pour votre aide en effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $date = "2019-07-31T08:01:54+02:00";
    $date2 = date('Y/m/d H:i:s', strtotime($date));
    Le résulta est certes converti dans sa syntaxe mais pas dans son exactitude.

    Résulta
    2019-07-31 06:01:57
    En réalité il est impossible que l'heure corresponde, car l'heure devrait correspondre à 08:01:57 et non 06:01:57, c'est comme si le +02:00 n'était pas pris en compte.

    Ou bien c'est moi qui me trompe.

    Bien à vous et merci pour votre contribution.

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 707
    Points : 43 789
    Points
    43 789
    Par défaut
    Regardes localtime

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut
    Re Bonjour,

    C'est bon j'ai résolu mon soucis d'exactitude à l'aide d'un petit str_replace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $date = "2019-07-31T08:01:54+02:00";
    $date = str_replace("+02:00","+00:00",$date);
    $date2 = date('Y/m/d H:i:s', strtotime($date));
    Résulta
    2019-07-31 08:01:57
    Merci à vous

  7. #7
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 707
    Points : 43 789
    Points
    43 789
    Par défaut
    Mauvais plan, le jour ou tu n'es plus en UTC+2, ça ne marchera pas.

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Le parseur de PHP ne sait pas interpréter les 2019-07-31T08:01:54+02:00 avec un DateTimeZone, il faut retraiter ce cas de figure à la main.
    Réfléchis un peu à une solution générique, pas compliqué du tout.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    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
    function affiche_date($date_c)
    {
    	echo 'Date c : '.$date_c.'<br/>';
     
    	$date_ici = date('d/m/Y H:i:s', strtotime($date_c));
    	echo 'Date ici : '.$date_ici.' ('.date_default_timezone_get().')'.'<br/>';
     
    	$date_UTC = date('d/m/Y H:i:s', strtotime($date_c)-date('Z', strtotime($date_c)));
    	echo 'Date UTC : '.$date_UTC.' (GMT)'.'<br/>';
     
    	$dateLocal = new DateTime($date_c);
    	echo 'Date sur place : '.$dateLocal->format('d/m/Y H:i:s').'<br/>';
    }
    //---------
    $date_c = '2019-08-31T10:00:00+00:00'; // Londres, Royaume-Uni (UTC±0:00)
    echo affiche_date($date_c);
    echo '<br/>';
    $date_c = '2019-08-31T10:00:00+02:00'; // Paris, France (été) (UTC+2:00)
    echo affiche_date($date_c);
    echo '<br/>';
    $date_c = '2019-08-31T10:00:00+05:45'; // Katmandou, Népal (UTC+5:45)
    echo affiche_date($date_c);
    echo '<br/>';
    $date_c = '2019-08-31T10:00:00-08:00'; // Los Angeles, États-Unis (UTC-8:00)
    echo affiche_date($date_c);
    Donne :
    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
    Date c : 2019-08-31T10:00:00+00:00
    Date ici : 31/08/2019 12:00:00 (Europe/Paris)
    Date UTC : 31/08/2019 10:00:00 (GMT)
    Date sur place : 31/08/2019 10:00:00
     
    Date c : 2019-08-31T10:00:00+02:00
    Date ici : 31/08/2019 10:00:00 (Europe/Paris)
    Date UTC : 31/08/2019 08:00:00 (GMT)
    Date sur place : 31/08/2019 10:00:00
     
    Date c : 2019-08-31T10:00:00+05:45
    Date ici : 31/08/2019 06:15:00 (Europe/Paris)
    Date UTC : 31/08/2019 04:15:00 (GMT)
    Date sur place : 31/08/2019 10:00:00
     
    Date c : 2019-08-31T10:00:00-08:00
    Date ici : 31/08/2019 20:00:00 (Europe/Paris)
    Date UTC : 31/08/2019 18:00:00 (GMT)
    Date sur place : 31/08/2019 10:00:00
    Donc, pour afficher la date "sur place" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        $dateLocal = new DateTime($date_c);
        echo 'Date sur place : '.$dateLocal->format('Y/m/d H:i:s');
    CQFD, non ?
    Dernière modification par Invité ; 31/08/2019 à 11h58.

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

Discussions similaires

  1. [DATA] Conversion format date vers caractère
    Par Mookfr dans le forum SAS Base
    Réponses: 1
    Dernier message: 06/05/2013, 13h24
  2. conversion de dates avec now() et to_char()
    Par pierrelm dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 09/06/2008, 15h31
  3. Probleme de conversion String -> Date avec SimpleDateFormat.parse(String)
    Par jeanlouis_lecodeur dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 02/07/2007, 09h18
  4. probleme avec la conversion de date
    Par obydissonn dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/06/2007, 03h40
  5. Conversion timestamp vers date avec oracle 9.2
    Par gaboo_bl dans le forum Oracle
    Réponses: 5
    Dernier message: 27/11/2006, 14h10

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