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 21/01/2011, 20h54   #1
Membre du Club
 
Sylvain
Inscription : avril 2002
Messages : 132
Détails du profil
Informations personnelles :
Nom : Sylvain
Localisation : Canada

Informations forums :
Inscription : avril 2002
Messages : 132
Points : 57
Points : 57
Envoyer un message via MSN à Sylvain245
Par défaut Mois accentué et conversion timestamp

Bonjour,

Dans ma base de donnée j'ai des dates aux format texte, tirer de un fichier .txt

Exemple de date :
- Février 2008
- 30 mai 2008
- 2 février 2007
- 7 septembre 2007
....

Pour chacune de ses dates, je veux créer une date format timestamp via mktime(). La date est accéder via :$data['gamReleaseFr']

Donc pour se faire, voici mon code :
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
 
$mois_fr = Array(0 => '', 1 => 'janvier',
 2 => 'février',
 3 => 'mars',
 4 => 'avril',
 5 => 'mai',
 6 => 'juin',
 7 => 'juillet',
 8 => 'aout',
 9 => 'septembre',
 10 => 'octobre',
 11 => 'novembre',
 12 => 'decembre');
 
$laDateTime = strtolower($data['gamReleaseFr']);
$laDateTime = explode(" ",$laDateTime);
if(count($laDateTime)==3)
{
   $leMois=$laDateTime[1];
   $chiffreMois = array_search($leMois, $mois_fr); 
   $gamReleaseTime = mktime(0, 0, 0, $chiffreMois, $laDateTime[0], $laDateTime[2]);
}
 
if(count($laDateTime)==2)
{
   $leMois=$laDateTime[0];
   $chiffreMois = array_search($leMois, $mois_fr); 
   $gamReleaseTime = mktime(0, 0, 0, $chiffreMois, $laDateTime[1], $laDateTime[2]);
}
Or pour les dates comportant des accents, le timestamp obtenu est mauvais,
voici ce que donne les timestamp pour ces exemples.
Le 2ieme résultat est via la fonction :date('Y-m-d',$gamReleaseTime);

- Février 2008 : 2007-12-01 : 1196467200
- 30 mai 2008 : 2008-05-30 : 1212105600
- 2 février 2007 : 2006-12-02 : 1165017600
- 7 septembre 2007 : 2007-09-07 : 1189123200



Vous savez pourquoi ?

Merci
Sylvain245 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 22h15   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
$laDateTime[2] dans ton cas 2 puisque tu n'as que 2 élements.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch (count($laDateTime) {
 
case 3 :
   $chiffreMois = array_search($laDateTime[1], $mois_fr);
   $jour = $laDateTime[0];
   $annee = $laDateTime[2];
break
 
case 2 :
   $chiffreMois = array_search($laDateTime[0], $mois_fr);
   $jour = 1;
   $annee = $laDateTime[1];
 break;
 
}
 
$gamReleaseTime = mktime(0, 0, 0, $chiffreMois, $jour, $annee);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 23h17   #3
Membre du Club
 
Sylvain
Inscription : avril 2002
Messages : 132
Détails du profil
Informations personnelles :
Nom : Sylvain
Localisation : Canada

Informations forums :
Inscription : avril 2002
Messages : 132
Points : 57
Points : 57
Envoyer un message via MSN à Sylvain245
Bonjour,

Merci pour ta réponse.

Par contre, j'ai encore un problème

Ancienne date Le mois Nouvelle date Timestamp
Février 2008 f�vrier 2007-12-01 1196467200
30 mai 2008 mai 2008-05-30 1212105600
25 juillet 2008 juillet 2008-07-25 1216944000
6 mars 2009 mars 2009-03-06 1236297600
2 février 2007 février 2007-02-02 1170374400
Juin 2008 juin 2008-06-01 1212278400
8 août 2008 août 2008-08-08 1218153600

le cas 2 pose problème il semble :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$mois_fr = Array(0 => '', 1 => 'janvier', 2 => 'février', 3 => 'mars', 
4 => 'avril', 5 => 'mai', 6 => 'juin', 7 => 'juillet', 8 => 'août', 
9 => 'septembre', 10 => 'octobre', 11 => 'novembre', 12 => 'décembre');
 
case 2 :
   $leMois = $laDateTime[0];
   $leMois = strtolower($leMois);
   echo "<td>".$leMois."</td>";					
   $chiffreMois = array_search(strtolower($laDateTime[0]), $mois_fr);
   $jour = 1;
   $annee = $laDateTime[1];
  break;
Le strtolower() semble être la cause... sur + de 150 dates différentes de format différentes, le mot Février est le seul qui cause problème.

EDIT :

En fait, après avoir rechercher dans la doc, le strtolower ne prend pas en charge la conversion des caractères accentué. En remplaçant cette fonction par : mb_strtolower($var, 'UTF-8'), tout fonctionne bien

Merci
Sylvain245 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 02h31.


 
 
 
 
Partenaires

Hébergement Web