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


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut Conversion en date
    Bonjour à tous.
    J'ai un petit problème de conversion d'une chaîne en date qui ne doit pourtant pas être si compliqué que ça mais j'ai un peu de mal.
    En fait, je récupère dans ma base de données toute une liste de personne, avec une date d'inscription qui est sous forme aaaa-mm-jj, et que je souhaiterais passer au format jj/mm/aa... Mais j'ai un peu de mal. Je vous montre mon code :

    Un petit détail je bosse sous copix, j'ai pas trouvé de forum dans la section framework alors je poste ma question ici vu que le problème est plus lié aux objet qu'au framework lui-même.
    Pour expliquer rapidement la fonction getDoc me renvoi la liste des doctorants que je sélectionne dans mes requêtes et qui se trouve dans une classe dans un autre fichier.
    Je ne peux pas modifier ce fichier je suis obligé de formater mes dates à ce moment là...

    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
    <?php
    //tri des valeurs en fonctions des listes déroulantes
    		$ppo->tristat1 = _request('tristat1');
    		if (CopixSession::get ('tristat1') != '') {
    			$countEMN = 'where StatusDossier <> "pré-inscription" and StatusDossier <> "Demission" and StatusDossier <> "Archive" and StatusDossier not like "Hors EMN%" and dateContrat < "'.$ppo->tristat1.'-01-01"  and AnneePrevueSoutenance >= "'.CopixSession::get('tristat1').'" ;';
    			$countHEMN = 'where StatusDossier like "Hors EMN%" and DatePremiereInscription <= "'.$ppo->tristat1.'-01-01" and AnneePrevueSoutenance >= "'.CopixSession::get('tristat1').'" ;';
     
    			//echo '3112'.substr(CopixSession::get('tristat1'),2, 2) ;
    		}
    $ppo->compteE = count($doc->getDoc($order, $countEMN, $condstatut));
    		$ppo->compteHE = count($doc->getDoc($order, $countHEMN, $condstatut));
    		$ppo->compteT = $ppo->compteE + $ppo->compteHE;
    		$ppo->donneesEMN = $doc->getDoc($order, $countEMND, $condstatut);
    //Calcul de la durée de la thèse
    		$i = 0 ;
    		$ppo->etpT = 0 ;
    		foreach($ppo->donneesEMN as $value){
     
    			// La colonne 74 coresspond à la date de première inscription
    			// La colonne 88 correspond à la date de soutenance
    			if(strlen($value[74]) == 0){
    				$value[74] = 0 ;
    			}
    			$datePremJ = (substr($value[74], 8, 2));
    			$datePremM = (substr($value[74], 5, 2));
    			$datePremA = (substr($value[74], 0, 4));
    			$dateSoutJ = (substr($value[88], 0, 2));
    			$dateSoutM = (substr($value[88], 3, 2));
    			$dateSoutA = (substr($value[88], 6, 2));
     
    			//mktime() retourne un timestamp unix celon les paramètres passés à la fonction qu'on reconverti ensuite en nombre de mois
    			$tpsSec = mktime(0,0,0, (int)$dateSoutM, (int)$dateSoutJ, (int)$dateSoutA) - mktime(0,0,0, (int)$datePremM, (int)$datePremJ, (int)$datePremA) ;
     
    			//conversion des secondes en nombres de mois
    			$ppo->nbrMois[$i] = (int)($tpsSec/(3600*24*30))  ;
     
    			//Calcul des etp
    			$ppo->etpA[$i] = number_format($ppo->nbrMois[$i]/12, 2) ;
    			$ppo->etpT = $ppo->etpT + $ppo->etpA[$i] ;
     
    			$i++ ;
    		}
    //Formatage pour afficher les informations sous le même format
    		$j = 0 ;
    		foreach($ppo->donneesEMN as $value[$j]){
    			$value[$j][74] = substr($value[$j][74], 8, 2).'/'.substr($value[$j][74], 5, 2).'/'.substr($value[$j][74], 2, 2) ;
    			$j++ ;
     
    			// echo '<pre>' ;
    				// print_r($value[$j]) ;
    			// echo '</pre>' ;
    		}?>
    En fait mon premier foreach marche très bien vu qu'il me calcule mes etp comme il faut et me donnes des résultats correct mais le deuxième... Rien à faire... Quan dje cherche à afficher {$ppo->donneesEMN[id][88]}, il me marque toujours la date au format de la base de données, c'est à dire aaaa-mm-jj...

    Comment faire pour qu'il formate es dates de la bonnes façon ?

  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
    Tu peux utiliser DATE_FORMAT dans ta requête pour avoir directement le format souhaité.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    Bon mon problème vient justement du fait que je ne peux pas toucher à la requête sauf pour ajouter des causes WHERE...

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $datePremJ = (substr($value[74], 8, 2));
    $dateSoutJ = (substr($value[88], 0, 2));
    Pourquoi tu decomposes differement $datePrem et $dateSout ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    Parce que le format des deux dates n'est pas le même dans la base de données (je sai spas comment isl ont fait ça mais c'est moche à voir), ce qui fait que je suis obligé d'avoir un traitement différent pour les deux champs.

  6. #6
    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
    Le "value" dans un foreach n'est qu'une copie : si tu le modifies, tu ne modifies pas le tableau d'origine.

    Tu peux faire simplement :
    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
    foreach($ppo->donneesEMN as $id->$value){
     
    			// La colonne 74 coresspond à la date de première inscription
    			// La colonne 88 correspond à la date de soutenance
    			if(strlen($value[74]) == 0){
    				$value[74] = 0 ;
    			}
    			$datePremJ = (substr($value[74], 8, 2));
    			$datePremM = (substr($value[74], 5, 2));
    			$datePremA = (substr($value[74], 0, 4));
    $ppo->donneesEMN[$id][74] = $datePremJ . "/" . $datePremM . "/" . $datePremA;
     
    			$dateSoutJ = (substr($value[88], 0, 2));
    			$dateSoutM = (substr($value[88], 3, 2));
    			$dateSoutA = (substr($value[88], 6, 2));
     
     
     
    			//mktime() retourne un timestamp unix celon les paramètres passés à la fonction qu'on reconverti ensuite en nombre de mois
    			$tpsSec = mktime(0,0,0, (int)$dateSoutM, (int)$dateSoutJ, (int)$dateSoutA) - mktime(0,0,0, (int)$datePremM, (int)$datePremJ, (int)$datePremA) ;
     
    			//conversion des secondes en nombres de mois
    			$ppo->nbrMois[$i] = (int)($tpsSec/(3600*24*30))  ;
     
    			//Calcul des etp
    			$ppo->etpA[$i] = number_format($ppo->nbrMois[$i]/12, 2) ;
    			$ppo->etpT = $ppo->etpT + $ppo->etpA[$i] ;
     
    			$i++ ;
    		}
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Conversion de date
    Par jdu dans le forum Access
    Réponses: 2
    Dernier message: 26/01/2005, 16h17
  2. Conversion de dates
    Par Gogoye dans le forum Modules
    Réponses: 5
    Dernier message: 10/08/2004, 11h39
  3. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  4. Conversion de date lors d'un import
    Par bilbon.S dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/03/2004, 14h33
  5. Conversion de date et division 64 bits
    Par dway dans le forum Assembleur
    Réponses: 38
    Dernier message: 27/01/2004, 10h31

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