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 :

Mois accentué et conversion timestamp [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    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 : 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
     
    $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

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    $laDateTime[2] dans ton cas 2 puisque tu n'as que 2 élements.

    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
    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);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2010, 09h42
  2. [vba-e] conversion timestamp
    Par Pieroots dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/03/2007, 15h25
  3. Conversion timestamp vers date avec oracle 9.2
    Par gaboo_bl dans le forum Oracle
    Réponses: 5
    Dernier message: 27/11/2006, 14h10
  4. Conversion timestamp en date
    Par devjcc dans le forum Langage
    Réponses: 6
    Dernier message: 21/09/2006, 15h34
  5. Conversion Timestamp vers varchar
    Par stejutt dans le forum SQL
    Réponses: 4
    Dernier message: 08/01/2004, 08h46

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