Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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/12/2010, 18h37   #1
Membre confirmé
 
Inscription : avril 2006
Messages : 507
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 507
Points : 239
Points : 239
Par défaut boucle incompréhensible ?

Bonjour à tous,

Je cherche à determiner un jour dans l'année en fonction du numéro du jour dans l'année que je fourni à ma fonction.

admettons que je cherche à trouver 1er décembre et que pour ce faire je passe en paramètre à ma fonction 334

voici ma fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
public $jour_dans_le_mois = array(31,28,31,30,31,30,31,31,30,31,30,31);
public $tabMois=array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
 
public function jourPeriode($jourZ){
for($k=0; $k<=11; $k++) {
 
echo $k."=>".($jourZ - $this->jour_dans_le_mois[$k]).", ";
 
if(($jourZ - $this->jour_dans_le_mois[$k]) <= 0){
$k=12;
}else{
$jourZ -= $this->jour_dans_le_mois[$k]; 
$j++;
}
};
 
$tabReturn=array($jourZ+1, $this->tabMois[$j]);
return $tabReturn;
}
voici maintenant le résultat du echo placé au début de ma fonction :

Citation:
0=>303, 1=>275, 2=>244, 3=>214, 4=>183, 5=>153, 6=>122, 7=>91, 8=>61, 9=>30, 10=>0, 0=>119, 1=>91, 2=>60, 3=>30, 4=>-1,
dans la mesure ou j'ai cette condition :

Code :
1
2
3
if(($jourZ - $this->jour_dans_le_mois[$k]) <= 0){
$k=12;
}
lorsque $k est égal à 12 ne devrais-je pas sortir de cette boucle ???

J'étais parti au départ sur une boucle encore plus simple :

Code :
1
2
3
4
5
6
7
8
9
10
public function jourPeriode($jourZ){
for($i=0; $i<=11; $i++) {
// cette boucle décompte tant que le numero est supérieur au nombre de jour du mois et passe au mois suivant, puis s'arrete quand le nombre correspond à la durée du mois parcouru.
echo $jourZ."=>".$this->jour_dans_le_mois[$i].", ";
 
if(($jourZ - $this->jour_dans_le_mois[$i]) > 0)  { $jourZ -= $this->jour_dans_le_mois[$i]; } else { break; } ;
};
$tabReturn=array($jourZ+1, $this->tabMois[$i]);
return $tabReturn;
}
et voici le résultat du echo :

Citation:
334=>31, 303=>28, 275=>31, 244=>30, 214=>31, 183=>30, 153=>31, 122=>31, 91=>30, 61=>31, 30=>30, 150=>31, 119=>28, 91=>31, 60=>30, 30=>31,
à ce stade je n'y comprend plus rien

Merci d'avance pour votre aide
Alexdezark est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 18h58   #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
Beaucoup plus simple :
Code :
1
2
3
4
<?php
$jour = 334;
$annee = 2010;
echo date('d/m/Y', mktime(0, 0, 0, 1, 1 + $jour, $annee));
Le mois de février ne fait pas toujours 28 jours de toute facon.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 19h09   #3
Membre confirmé
 
Inscription : avril 2006
Messages : 507
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 507
Points : 239
Points : 239
Merci sabotage,

Non je sais bien qu'il y à des années bissextiles mais dans mon cas ça ne me préoccupe pas, je me base sur une année non bissextile pour juste afficher des dates comme :

du 1 décembre au 30 avril

il n'y a pas d'année c'est pour cela que je fourni un tableau ou le mois de Février comporte 28 jours

dans les champs de saisie c'est pareil on ne peut pas rentrer le 29 Février, ou alors il sera considéré comme 1er Mars.

Mais pourquoi elle marche pas ma boucle ?

Je l'ai encore simplifiée :

Code :
1
2
3
4
5
6
$i=0;
while($jourZ > 0){
echo $jourZ."=>".($jourZ - $this->jour_dans_le_mois[$i]).", ";
$jourZ=($jourZ - $this->jour_dans_le_mois[$i]);
$i++;
};
et mon echo dit :

Citation:
334=>303, 303=>275, 275=>244, 244=>214, 214=>183, 183=>153, 153=>122, 122=>91, 91=>61, 61=>30, 30=>0, 150=>119, 119=>91, 91=>60, 60=>30, 30=>-1,
c'est pourtant bien : strictement supérieur à 0 la condition.

or le while semble s'arreter uniquement au -1

et puis pourquoi d'un coup $jourZ devient égal à 150 ???

De toute façon je vais utiliser ta méthode mais j'aimerai bien comprendre

Merci encore
Alexdezark est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 19h30   #4
Membre confirmé
 
Inscription : avril 2006
Messages : 507
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 507
Points : 239
Points : 239
ça y est j'ai compris

En fait j'appelle 2 fois ma fonction dans ma page

Donc ça repartait sur la date de fin

Faudrait jamais travailler le week end

en tout cas merci quand même Sabotage pour ta méthode beaucoup plus simple

Bonne soirée à tous
Alexdezark 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 08h50.


 
 
 
 
Partenaires

Hébergement Web