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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 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
    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
    Membre averti
    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
    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 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
    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
    Membre averti
    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
    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 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
    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
    Membre averti
    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
    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 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
    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
    Membre averti
    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
    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;
          }
          ?>

  10. #10
    Expert confirmé

    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
    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

  11. #11
    Membre averti
    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
    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