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

PHP & Base de données Discussion :

conversion date au format iso [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut conversion date au format iso
    Bonjour,

    Pour l'insertion des microdonnées , les dates doivent être au format ISO

    Je voudrais ajouter une fonction pour que $date_debut actuellement au format YYYYMMDD s'affiche au format YYYY-MM-DD

    Faut-il créer une seconde date au bon format pour les microdonnées, comment effectuer la conversion ?

    Merci d'avance

  2. #2
    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
    Bonjour,

    Fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
     
    $str  = '20120104';
    $date = DateTime::createFromFormat('Ymd', $str)->format('Y-m-d');  // 2012-01-04
     
    ?>

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut
    Merci, pour ta réponse,

    Voici le code appliqué à la page,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $formatDate = formatage_date($date_debut, $date_fin);
     $date_debut = $evenement->date_debut;
     $date_fin = $evenement->date_fin;
     
    $datedebut = DateTime::createFromFormat('Ymd', $date_debut)->format('Y-m-d');
    $datefin = DateTime::createFromFormat('Ymd', $date_fin)->format('Y-m-d');
    et pour les microdonnées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo " <time itemprop='startDate' datetime='$datedebut'>$datedebut</span><time itemprop='endDate' datetime='$datefin'>$datefin</time></span><span  class='date' style='line-height:2.2em;'>$formatDate</span> |  <span itemprop='location' itemscope itemtype='http://data-vocabulary.org/?Organization' ><span itemprop='locality' class='lieuListe'>$contenu_lieu</span></span><br>";
    il y a encore un bug car j'ai un "unexpected T_OBJECT_OPERATOR"

  4. #4
    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
    Euh, j'ai du mal à suivre : tu as une fonction formatage_date() qui te sers à quoi vu que tu refait un formatage de date après ?
    Postes aussi le code pour les microdonnées dans la foulée.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut
    S'agissant d'événements, je dois afficher "du tant au tant" (si durée > un jour) d'ou la fonction formatage_date qui affiche la date en clair dans la page

    les microdonnées au complet:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo "<b><a href='pageevenement' itemprop='url'>&#x2022;  <span itemprop='summary'>$titre</span></a></b><br><span itemprop='description'><i>$sous_titre</i></span><br>"
       ." <time itemprop='startDate' datetime='$datedebut'>$datedebut</span><time itemprop='endDate' datetime='$datefin'>$datefin</time></span><span  class='date' style='line-height:2.2em;'>$formatDate</span> |  <span itemprop='location' itemscope itemtype='http://data-vocabulary.org/?Organization' ><span itemprop='locality' class='lieuListe'>$contenu_lieu</span></span><br>";

  6. #6
    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
    Citation Envoyé par event Voir le message
    il y a encore un bug car j'ai un "unexpected T_OBJECT_OPERATOR"
    Dans quelle partie du code cette erreur apparait ?
    Parce que dans ton echo, il me semble qu'il n'y a pas d'erreurs

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut
    devant la ligne 6 ci-dessus: $datedebut=DateTime ...

    je me penche aussi sur cette doc

    [URL="http://php.net/manual/fr/datetime.createfromformat.php"[/URL]
    mais pas facile ...

  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
    Ok, que te renvoie cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date_debut = $evenement->date_debut;
    Tu as l'erreur parce que le format de $date_debut ne plait pas à DateTime

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut
    cette ligne dans la table sql affiche un nombre à 8 chiffres ex: 20120104

    mais est en varchar et non pas en date utc

    j'ai aussi ceci en début de code pour l'affichage en clair

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date_actuelle = date('Y') ."".date('m')."".date('d') ;
    merci !

  10. #10
    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
    Bon pour avoir la date du jour c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $now = date('Ymd'); // 20120104
    $now = date('Y-m-d'); // 2012-01-04
    Le format texte est correcte. Après il faudrait poster un peu plus de code pour trouver le problème. Mets le code de formatage_date()

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut
    Pour formatage_date j'ai juste ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $formatDate = formatage_date($date_debut, $date_fin);
    je continue à chercher , les conversions de dates sont un vrai casse
    tête

    cette formule te parle t-elle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTime.ParseExact(dateString, "yyyyMMdd", null).ToString("yyyy-MM-dd");
    il y a aussi ceci

    Retourne la date UTC courante au format 'YYYY-MM-DD' ou YYYYMMDD suivant le contexte numérique ou chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
            -> '2003-08-14', 20030814
    UTC_DATE() est disponible depuis MySQL 4.1.1.
    mais je ne saurais pas comment intégrer dans mon code

    Pour info un lien concernant les microdonnées:
    http://support.google.com/webmasters...&answer=176035

  12. #12
    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
    Bon,
    pour arriver à ce que tu souhaites il faut faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
     
    $str  = '20120104';
    $date = DateTime::createFromFormat('Ymd', $str)->format(DATE_ISO8601);  // 2012-01-04T18:42:43+0100
     
    ?>
    Après pour mysql, ça dépend comment tu gères tes données : date, time, timestamp...

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Ok, que te renvoie cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date_debut = $evenement->date_debut;
    Tu as l'erreur parce que le format de $date_debut ne plait pas à DateTime

    Tout vient de là il me semble

    Dans mysql, les dates ont été insérées en varchar, il faudrait donc commencer par avoir des champs au format date , et donc récupérer les anciennes valeurs dans ces nouveaux champs au bon format

    Je cherche une formule pour réaliser cette opération

  14. #14
    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
    Bonjour,

    Pour convertir tes chaines en date tu disposes d'un paquet de fonctions en mysql : regardes ici.
    Ensuite, cela serait bien si tu postais le corps de la fonction formatage_date(), histoire de voir comment la date texte récupérée de mysql est transformée en date.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Le pb venait de la version PHP utilisée, en l'occurence PHP 5. Les fonctions que tu m'as données marchent et ma page avec les microdonnées est validée, mais il est nécessaire de passer à PHP 5.3 . Reste plus qu'à mettre à jour le code pour être compatible avec cette version...

    Merci beaucoup de ton aide

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Pour répondre à ta question, voici le fonction formatage_date. Celle-ci était bien cachée, mais la voilà, je viens de la localiser et en effet, sous PHP 5.3, elle génére un beau warning:

    preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash
    et cela malgré un remplacement de ereg_replace (depreciated) par preg_replace

    Une idée afin que celle-ci s'affiche correctement sous php 5.3 ?



    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    <?php  
     
      function formatage_date($date1,$date2) {
          if(substr($date1, 4,2) == "01") {
          $mois = "Janvier";
          }
          elseif (substr($date1, 4,2) == "02"){
          $mois = "Février";
          }
          elseif (substr($date1, 4,2) == "03"){
          $mois = "Mars";
          }
          elseif (substr($date1, 4,2) == "04"){
          $mois = "Avril";
          }
          elseif (substr($date1, 4,2) == "05"){
          $mois = "Mai";
          }
          elseif (substr($date1, 4,2) == "06"){
          $mois = "Juin";
          }
          elseif (substr($date1, 4,2) == "07"){
          $mois = "Juillet";
          }
          elseif (substr($date1, 4,2) == "08"){
          $mois = "AoÛt";
          }
          elseif (substr($date1, 4,2) == "09"){
          $mois = "Septembre";
          }
          elseif (substr($date1, 4,2) == "10"){
          $mois = "Octobre";
          }
          elseif (substr($date1, 4,2) == "11"){
          $mois = "Novembre";
          }
          elseif (substr($date1, 4,2) == "12"){
          $mois = "Décembre";
          }
     
     
          if(substr($date2, 4,2) == "01") {
          $moisFin = "Janvier";
          }
          elseif (substr($date2, 4,2) == "02"){
          $moisFin = "Février";
          }
          elseif (substr($date2, 4,2) == "03"){
          $moisFin = "Mars";
          }
          elseif (substr($date2, 4,2) == "04"){
          $moisFin = "Avril";
          }
          elseif (substr($date2, 4,2) == "05"){
          $moisFin = "Mai";
          }
          elseif (substr($date2, 4,2) == "06"){
          $moisFin = "Juin";
          }
          elseif (substr($date2, 4,2) == "07"){
          $moisFin = "Juillet";
          }
          elseif (substr($date2, 4,2) == "08"){
          $moisFin = "AoÛt";
          }
          elseif (substr($date2, 4,2) == "09"){
          $moisFin = "Septembre";
          }
          elseif (substr($date2, 4,2) == "10"){
          $moisFin = "Octobre";
          }
          elseif (substr($date2, 4,2) == "11"){
          $moisFin = "Novembre";
          }
          elseif (substr($date2, 4,2) == "12"){
          $moisFin = "Décembre";
          }
          if(substr($date1, 4,2) != substr($date2, 4,2)) {
          $formatDate = "Du ". substr($date1, 6,2)." ".$mois." au ".substr($date2, 6,2)." ".$moisFin." ". substr($date1, 0,4);
          $formatDate = preg_replace(" 0", " ",$formatDate);
          }
          elseif (substr($date1, 6,2) == substr($date2, 6,2)){
       $timestamp_evenement = mktime(0, 0, 0, substr($date1, 4,2), substr($date1, 6,2), substr($date1, 0,4)); 
    $numero_jour = date('w', $timestamp_evenement); 
    $jours = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'); 
    $nom_jour = $jours[$numero_jour]; 
     
          $formatDate = $nom_jour. " ".substr($date1, 6,2)." ".$mois." ". substr($date1, 0,4);
          $formatDate = preg_replace(" 0", " ",$formatDate);
          }
          else {
          $formatDate = "Du ".substr($date1, 6,2)." au ".substr($date2, 6,2)." ".$mois." ". substr($date1, 0,4);
          $formatDate = preg_replace(" 0", " ",$formatDate);
          }
          return $formatDate;
          }
          ?>

  17. #17
    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 727
    Points
    10 727
    Par défaut
    c'est quoi cette fonction ignoble, y'a tout ce qu'il faut dans PHP pour faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    echo MessageFormatter::create('fr', 'Du {0,date,full} au {1,date,full}')->format(
        array(
            strtotime('20120104'), 
            strtotime('20121004')
        )
    );
    // Du mercredi 4 janvier 2012 au jeudi 4 octobre 2012

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Points : 9
    Points
    9
    Par défaut
    Le php de mon site a pris aussi un coup de vieux on dirait

    Merci pour ce code sobre et efficace , les dates s'affichent désormais correctement sous PHP 5.3 et normalement cela devrait même accélérer la vitesse de chargement

    Merci beaucoup pour votre aide

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

Discussions similaires

  1. [MySQL] conversion date au format français
    Par PeaceMind dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 19/07/2012, 18h48
  2. problème conversion date en format yyMMdd
    Par CosaNostra dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 08/06/2010, 13h41
  3. date au format iso xml
    Par jeandu69 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 28/05/2009, 17h52
  4. Conversion de date en format GMT
    Par seb92 dans le forum Langage
    Réponses: 1
    Dernier message: 31/05/2007, 17h42
  5. [MySQL] Probleme de conversion de date en format francophone
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 21/11/2006, 11h40

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