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 18/02/2011, 14h55   #1
Invité de passage
 
Étudiant
Inscription : février 2011
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2011
Messages : 6
Points : 0
Points : 0
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 :
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 ?
InJeCt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h09   #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
Tu peux utiliser DATE_FORMAT dans ta requête pour avoir directement le format souhaité.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h12   #3
Invité de passage
 
Étudiant
Inscription : février 2011
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2011
Messages : 6
Points : 0
Points : 0
Bon mon problème vient justement du fait que je ne peux pas toucher à la requête sauf pour ajouter des causes WHERE...
InJeCt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h30   #4
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
Code :
1
2
$datePremJ = (substr($value[74], 8, 2));
$dateSoutJ = (substr($value[88], 0, 2));
Pourquoi tu decomposes differement $datePrem et $dateSout ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h32   #5
Invité de passage
 
Étudiant
Inscription : février 2011
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2011
Messages : 6
Points : 0
Points : 0
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.
InJeCt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h40   #6
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
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 :
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++ ;
		}
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h58   #7
Invité de passage
 
Étudiant
Inscription : février 2011
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2011
Messages : 6
Points : 0
Points : 0
Ah ouais d'accord... Voila donc ce qui m'avais échappé.

En essayant ta solution J'ai une erreur comme quoi je ne peux accéder à une propriété vide au niveau de la ligne :

Code :
foreach($ppo->donneesEMN as $id->$value){
... Je suis désolé j'ai du mal encore avec la programmation objet j'ai commencé il y a peu de temps ^^"

A quoi sert le $is->$value dans ce cas ?
InJeCt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 16h56   #8
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
C'est moi qui ne suis pas bien reveillé
Code :
foreach($ppo->donneesEMN as $id=>$value){
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h11.


 
 
 
 
Partenaires

Hébergement Web