Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2012, 13h29   #1
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
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
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h03   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

Fais comme ça :
Code :
1
2
3
4
5
6
<?php
 
$str  = '20120104';
$date = DateTime::createFromFormat('Ymd', $str)->format('Y-m-d');  // 2012-01-04
 
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h46   #3
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
Merci, pour ta réponse,

Voici le code appliqué à la page,

Code :
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 :
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"
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h56   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h08   #5
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
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 :
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>";
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h12   #6
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h38   #7
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
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 ...
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h43   #8
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Ok, que te renvoie cette ligne :
Code :
$date_debut = $evenement->date_debut;
Tu as l'erreur parce que le format de $date_debut ne plait pas à DateTime
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h50   #9
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
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 :
$date_actuelle = date('Y') ."".date('m')."".date('d') ;
merci !
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h23   #10
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bon pour avoir la date du jour c'est :
Code :
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()
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 18h21   #11
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
Pour formatage_date j'ai juste ce code:

Code :
$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 :
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 :
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
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 18h49   #12
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bon,
pour arriver à ce que tu souhaites il faut faire comme ça :
Code :
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...
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 09h51   #13
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
Citation:
Envoyé par rawsrc Voir le message
Ok, que te renvoie cette ligne :
Code :
$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
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 10h17   #14
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 14h55   #15
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
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
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h14   #16
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
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:

Citation:
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 :
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;
      }
      ?>
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h33   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
c'est quoi cette fonction ignoble, y'a tout ce qu'il faut dans PHP pour faire ça

Code :
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 17h06   #18
Invité de passage
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 2
Points : 2
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
event est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h55.


 
 
 
 
Partenaires

Hébergement Web