Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 05/07/2011, 18h55   #1
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Par défaut Jeux sur les dates

Bonjour,
Je souhaite maitrisé la gestion des dates en php.
On part de cet exemple :
Code :
1
2
3
 
ini_set('date.timezone', 'Africa/Douala');
$date = new DateTime('16-07-2011');
1. Calculer le nombre de jours de ce mois :
Code :
1
2
3
 
//Nombre de jour de ce mois
$num = $date->format('t');
Ca marche !

2. Le dernier jour du mois avec la méthode modify()
Code :
1
2
3
4
 
//Dernier jour du mois
$clause = '+'.$num.' days';
echo $date->modify('+'.$num.' days');
Ca ne marche pas.

3. Calculer le nombre de semaines du mois
Code :
1
2
 
$num = $date->format('t')/7;
Je pense il faut arrondir mais je ne sais pas faire.

4. La date de début et fin de chaque semaine du mois
Je ne sais par où commencer. Mais si j'ai la date de début de chaque semaine, il faudra :
Code :
1
2
 
$date->modify('+7 days');
Merci d'avance pour votre aide...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 09h24   #2
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Citation:
Envoyé par okoweb Voir le message
2. Le dernier jour du mois avec la méthode modify()
Code :
1
2
3
4
 
//Dernier jour du mois
$clause = '+'.$num.' days';
echo $date->modify('+'.$num.' days');
Ca ne marche pas.

Code :
1
2
3
$clause = '+'.$num.' days';
$date->modify('+'.$num.' days');
echo $date->format('Y-m-d') . "\n";
Et cela va t'incrémenter de 31 jours et non te donner le dernier jour du mois, tu connais déjà le nombre de jour tu n'as qu'à concaténer au mois et année actuels.

Citation:
3. Calculer le nombre de semaines du mois
Code :
1
2
 
$num = $date->format('t')/7;
Je pense il faut arrondir mais je ne sais pas faire.
Code :
1
2
3
$num = $date->format('t')/7;
 
echo number_format($num,0);

Citation:
4. La date de début et fin de chaque semaine du mois
Je ne sais par où commencer. Mais si j'ai la date de début de chaque semaine, il faudra :
Code :
1
2
 
$date->modify('+7 days');
Récupère le premier jour du mois et tu incrémente de 7 puis de 1, 7, 1....
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 09h34   #3
Membre éprouvé
 
Homme romain escudier
Développeur informatique
Inscription : juin 2011
Messages : 300
Détails du profil
Informations personnelles :
Nom : Homme romain escudier
Âge : 22
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 300
Points : 471
Points : 471
2:
Code :
$date->mofify('+'.($num-intval($date->format('d')))+' day');
par exemple pour aujourd'hui:
$num=31;
$date->format('d')=6;
31-6=25;
Si on rajoute 25 jours a la date courante, on tombe donc sur le 31 juillet

3:

Fonction round

Citation:
round(intval($date->format('t'))/7,2);
pour arrondir à 2 chiffres après la virgule.

4:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$date=new DateTime("now"); //date d'aujourd'hui
$date->modify('+'.(8-date("N")).' day'); //date du début de cette semaine
$nb=date("W"); //Numéro de cettesemaine
//stockage dans une variable de toutes les semaine de l'annee en cour
while ($nb > 0) //tant qu'on est pas au début d'année
{
	$date->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
	$semaine[$nb]["fin"]=$date->format("d/m/Y"); //La fin de cette semaine
	$date->modify('-6 day'); //on remonte au lundi
	$semaine[$nb]["debut"]=$date->format("d/m/Y"); //date de debut de la semaine
	$nb--; //on passe a la semaine d'avant
}
Tu retrouve donc un tableaux avec:
$semaine[23]["debut"]=Date du début de la semaine 23
$semaine[23]["fin"]=date de la fin de la semaine 23

Si tu veux pour le mois, tu remplace

par
Code :
$date->format("m") == $Moiscourant
Avec
Code :
$MoisCourant=$date->format("m");
Avant de commencer ta boucle
__________________
Pas de solution, pas de probleme

Une réponse utile (ou +1) le pouce vert
Une réponse à votre question

skeud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 20h30   #4
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Merci à vous tous, je teste...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 23h03   #5
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonsoir,

puis surtout enlevez-moi le "s" pour le modificateur envoyé à la fonction modify()
Code :
1
2
 
$date->modify('+'.$num.' day'); // SANS LE S
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 08h30   #6
Membre éprouvé
 
Homme romain escudier
Développeur informatique
Inscription : juin 2011
Messages : 300
Détails du profil
Informations personnelles :
Nom : Homme romain escudier
Âge : 22
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 300
Points : 471
Points : 471
Citation:
Envoyé par ska_root Voir le message
Bonsoir,

puis surtout enlevez-moi le "s" pour le modificateur envoyé à la fonction modify()
Code :
1
2
 
$date->modify('+'.$num.' day'); // SANS LE S
C'est modifier, mais c'est plus anglais du coup, imagine on retire plusieurs jours
__________________
Pas de solution, pas de probleme

Une réponse utile (ou +1) le pouce vert
Une réponse à votre question

skeud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 13h36   #7
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
La fin des temps pointe à l'horizon...
Je m'explique. Je souhaite pour un mois donné, créer un array des semaines de l'année du mois et pour chaque semaine, stocker la date de début et la date de fin. A cet effet j'ai modifié le code de @skeud ainsi :
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
 
ini_set('date.timezone', 'Africa/Douala');
$date = new DateTime('now'); //date d'aujourd'hui
//Nombre de jour de ce mois
$num = $date->format('t');
 
//Premier jour du mois
$date_debut_mois = $date->format('00-m-Y');
$date1 = new DateTime($date_debut_mois); //date de ce jour
$date1->modify('+'.(8-intval($date1->format("N"))).' day'); //date du début de cette semaine
$nb_semaine_debut = intval($date1->format("W")); //Numéro de cette semaine
echo $date_debut_mois;
echo '<br />';
echo $nb_semaine_debut;
echo '<br />';
 
//Dernier jour du mois
$date->modify('+'.($num-intval($date->format('d'))).' days');
$date_fin_mois = $date->format('d-m-Y');
$date2 = new DateTime($date_fin_mois); //date de ce jour
$date2->modify('+'.(8-intval($date2->format("N"))).' day'); //date du début de cette semaine
$nb_semaine_fin = intval($date2->format("W")); //Numéro de cette semaine
echo $date_fin_mois;
echo '<br />';
echo $nb_semaine_fin;
echo '<br />';
 
//stockage dans une variable de toutes les semaine du mois
while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
{
	$date2->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
	$semaine[$nb_semaine_fin]["fin"]=$date2->format("d/m/Y"); //La fin de cette semaine
	$date2->modify('-6 day'); //on remonte au lundi
	$semaine[$nb_semaine_fin]["debut"]=$date2->format("d/m/Y"); //date de debut de la semaine
	$nb_semaine_fin --; //on passe a la semaine d'avant
}
 
echo '<pre>';
print_r($semaine);
echo '</pre>';
et voici le résultat :
Citation:
Array
(
[31] => Array
(
[fin] => 31/07/2011
[debut] => 25/07/2011
)

[30] => Array
(
[fin] => 24/07/2011
[debut] => 18/07/2011
)

[29] => Array
(
[fin] => 17/07/2011
[debut] => 11/07/2011
)

[28] => Array
(
[fin] => 10/07/2011
[debut] => 04/07/2011
)

[27] => Array
(
[fin] => 03/07/2011
[debut] => 27/06/2011
)

)
J'ai bel et bien mon array mais il y'a des dates hors que mon mois qui s'infiltrent. C'est le cas de l'index 27 où la ne fait pas une date du mois de juillet. En fait je souhaite que mon array ait les dates de début et de fin du mois comme bornes.
Donc pour mon besoin et pour le mois en cours je souhaite :
Citation:
Array
(
[31] => Array
(
[fin] => 31/07/2011
[debut] => 25/07/2011
)

....

[27] => Array
(
[fin] => 03/07/2011
[debut] => 01/07/2011
)

)
L'idée est de parcourir cet array et passer les dates de debut et de fin de chaque semaine à une fonction php pour ressortir les états de vente de chaque semaine d'un mois donné.

Code :
1
2
3
4
 
foreach($semaines as $tabl_result){
    semaineEtats($tabl_result['debut'],$tabl_result['fin']);
}
Meilleures salutations.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 19h14   #8
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
L'astuce serait aussi je pense de modifier la valeur de la clé "debut" à $date_debut_mois du premier élément $semaine et aussi modifier la clé "fin" à $date_fin_mois du dernier élément de $semaine.
Je ne sais donc pas comment attraper le premier et le dernier éléments de $semaine. Je rappelle $semaine est un tableau associatif.
Code :
1
2
3
4
 
echo '<pre>';
print_r($semaine);
echo '</pre>';
Résultat :
Citation:
Array
(
[31] => Array
(
[fin] => 31/07/2011
[debut] => 25/07/2011
)

[30] => Array
(
[fin] => 24/07/2011
[debut] => 18/07/2011
)

[29] => Array
(
[fin] => 17/07/2011
[debut] => 11/07/2011
)

[28] => Array
(
[fin] => 10/07/2011
[debut] => 04/07/2011
)

[27] => Array
(
[fin] => 03/07/2011
[debut] => 27/06/2011
)

)
Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 19h40   #9
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Pour bien poser mon problème : comment se positionner sur le premier et le dernier index d'un array ?
Code :
1
2
3
4
5
6
7
 
$semaine = Array(
27 => Array('debut' => '27/06/2011', 'fin' => '03/07/2011'),
28 => Array('debut' => '04/07/2011', 'fin' => '10/07/2011'),
29 => Array('debut' => '11/07/2011', 'fin' => '7/07/2011'),
31 => Array('debut' => '25/07/2011', 'fin' => '31/07/2011')
);
Sans toute fois connaitre à l'avance les indices de $semaine, comment attraper :
Code :
1
2
3
4
 
$semaine[27]['debut']
// et
$semaine[31]['fin']
Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 08h39   #10
Membre éprouvé
 
Homme romain escudier
Développeur informatique
Inscription : juin 2011
Messages : 300
Détails du profil
Informations personnelles :
Nom : Homme romain escudier
Âge : 22
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 300
Points : 471
Points : 471
Avec un foreach:

Code :
foreach ($tableau as $key => $value)
ça permet de parcourir ton tableau en ne prenant pas compte des indice.
La valeur entre crochet (ton 27) est stocké dans $key.
La valeur de cette case de tableaux est stocké dans $value.
__________________
Pas de solution, pas de probleme

Une réponse utile (ou +1) le pouce vert
Une réponse à votre question

skeud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 09h01   #11
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Citation:
Envoyé par skeud Voir le message
Avec un foreach:

Code :
foreach ($tableau as $key => $value)
ça permet de parcourir ton tableau en ne prenant pas compte des indice.
La valeur entre crochet (ton 27) est stocké dans $key.
La valeur de cette case de tableaux est stocké dans $value.
Comment attraper le premier et dernier $key dans la boucle foreach ? OU comment se positionner sur le premier et le dernier $key dans la boucle foreach...

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 09h11   #12
Membre éprouvé
 
Homme romain escudier
Développeur informatique
Inscription : juin 2011
Messages : 300
Détails du profil
Informations personnelles :
Nom : Homme romain escudier
Âge : 22
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 300
Points : 471
Points : 471
Code :
1
2
3
4
5
6
7
8
9
10
 
$min=9999;
$max=0;
foreach ($tableau as $key)
{
  if ($key > $max)
    $max=$key;
  if ($key < $min)
    $min=$key;
}
$min = indice le plus petits de ton tableaux et superieur à 0;
$max = indice le plus grands de ton tableaux.

Cet exemple ne fonctionne que pour les nombre < 9999 dans les indices. Si tu as des indices supérieur à 9999, il faut mettre $min=maximum_possible;
pareil pour $max
__________________
Pas de solution, pas de probleme

Une réponse utile (ou +1) le pouce vert
Une réponse à votre question

skeud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 09h51   #13
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
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
 
ini_set('date.timezone', 'Africa/Douala');
$date = new DateTime('now'); //date d'aujourd'hui
//Nombre de jour de ce mois
$num = $date->format('t');
 
//Premier jour du mois
$date_debut_mois = $date->format('00-m-Y');
$date1 = new DateTime($date_debut_mois); //date de ce jour
$date1->modify('+'.(8-intval($date1->format("N"))).' day'); //date du début de cette semaine
$nb_semaine_debut = intval($date1->format("W")); //Numéro de cette semaine
echo $date_debut_mois;
echo '<br />';
echo $nb_semaine_debut;
echo '<br />';
 
//Dernier jour du mois
$date->modify('+'.($num-intval($date->format('d'))).' days');
$date_fin_mois = $date->format('d-m-Y');
$date2 = new DateTime($date_fin_mois); //date de ce jour
$date2->modify('+'.(8-intval($date2->format("N"))).' day'); //date du début de cette semaine
$nb_semaine_fin = intval($date2->format("W")); //Numéro de cette semaine
echo $date_fin_mois;
echo '<br />';
echo $nb_semaine_fin;
echo '<br />';
 
//stockage dans une variable de toutes les semaine du mois
while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
{
	$date2->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
	$semaine[$nb_semaine_fin]["fin"]=$date2->format("d/m/Y"); //La fin de cette semaine
	$date2->modify('-6 day'); //on remonte au lundi
	$semaine[$nb_semaine_fin]["debut"]=$date2->format("d/m/Y"); //date de debut de la semaine
	$nb_semaine_fin --; //on passe a la semaine d'avant
}
 
 
while(list($cle,$val) = each($semaine)){
if($cle == $nb_semaine_debut) $semaine[$nb_semaine_debut]['debut'] = $date_debut_mois;
if($cle == $nb_semaine_fin) $semaine[$nb_semaine_fin]['fin'] = $date_fin_mois;
}
 
 
echo '<pre>';
print_r($semaine);
echo '</pre>';
Resultat :
Citation:
Array
(
[31] => Array
(
[fin] => 31/07/2011
[debut] => 25/07/2011
)

[30] => Array
(
[fin] => 24/07/2011
[debut] => 18/07/2011
)

[29] => Array
(
[fin] => 17/07/2011
[debut] => 11/07/2011
)

[28] => Array
(
[fin] => 10/07/2011
[debut] => 04/07/2011
)

[27] => Array
(
[fin] => 03/07/2011
[debut] => 00-07-2011
)

)
Le résultat n'est satisfaisant que pour le mois en cours. Les bornes de mon array couvrent bien le mois.

Mais si je change de mois ligne 2
Code :
1
2
 
$date = new DateTime('11-08-2011'); //Aout 2011
Les bornes ne sont plus respectées. Je pèche à quel niveau ?
Citation:
Array
(
[36] => Array
(
[fin] => 04/09/2011
[debut] => 29/08/2011
)

[35] => Array
(
[fin] => 28/08/2011
[debut] => 22/08/2011
)

[34] => Array
(
[fin] => 21/08/2011
[debut] => 15/08/2011
)

[33] => Array
(
[fin] => 14/08/2011
[debut] => 08/08/2011
)

[32] => Array
(
[fin] => 07/08/2011
[debut] => 01/08/2011
)

[31] => Array
(
[fin] => 31/07/2011
[debut] => 00-08-2011
)

)

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 12h05   #14
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2010
Messages : 76
Points : 161
Points : 161
Citation:
Envoyé par okoweb Voir le message
Pour bien poser mon problème : comment se positionner sur le premier et le dernier index d'un array ?
Bonjour, vous avez la fonction array_keys qui est faite pour ça.

Code :
1
2
3
4
 
$keys = array_keys($semaine);
$debut =$semaine[$keys[0]];
$fin = $semaine[$keys[count($keys)-1]];
cela devrait faire l'affaire.

HTH.
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 16h15   #15
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
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
 
ini_set('date.timezone', 'Africa/Douala');
$date = new DateTime('22-07-2011'); //date d'aujourd'hui
//Nombre de jour de ce mois
$num = $date->format('t');
 
//Premier jour du mois
$date_debut_mois = $date->format('01-m-Y');
$date1 = new DateTime($date_debut_mois); //date de ce jour
$date1->modify('+'.(8-intval($date1->format("N"))).' day'); //date du début de cette semaine
$nb_semaine_debut = intval($date1->format("W")); //Numéro de cette semaine
echo $date_debut_mois;
echo '<br />';
echo $nb_semaine_debut;
echo '<br />';
 
//Dernier jour du mois
$date->modify('+'.($num-intval($date->format('d'))).' days');
$date_fin_mois = $date->format('d-m-Y');
$date2 = new DateTime($date_fin_mois); //date de ce jour
$date2->modify('+'.(8-intval($date2->format("N"))).' day'); //date du début de cette semaine
$nb_semaine_fin = intval($date2->format("W")); //Numéro de cette semaine
echo $date_fin_mois;
echo '<br />';
echo $nb_semaine_fin;
echo '<br />';
 
//stockage dans une variable de toutes les semaine du mois
while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
{
	$date2->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
	$semaine[$nb_semaine_fin]["fin"]=$date2->format("d-m-Y"); //La fin de cette semaine
	$date2->modify('-6 day'); //on remonte au lundi
	$semaine[$nb_semaine_fin]["debut"]=$date2->format("d-m-Y"); //date de debut de la semaine
	$nb_semaine_fin --; //on passe a la semaine d'avant
}
 
//Modification des éléments de mon array 1er et dernier
$keys = array_keys($semaine);
$debut = $semaine[$keys[count($keys)-1]]['debut'] = $date_debut_mois;
$fin =$semaine[$keys[0]]['fin'] = $date_fin_mois;
 
echo '<pre>';
print_r($semaine);
echo '</pre>';
Ce code marche comme je veux, mais en fixant le mois à décembre j'ai cette erreur :
Citation:
Notice: Undefined variable: semaine in I:\wamp\www\dpip\index2.php on line 45

Warning: array_keys() expects parameter 1 to be array, null given in I:\wamp\www\dpip\index2.php on line 45
Je compte sur vous...

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 09h01   #16
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2010
Messages : 76
Points : 161
Points : 161
votre variable semaine a une portée locale à la boucle ci-dessous :
Code :
1
2
3
4
5
6
7
8
9
//stockage dans une variable de toutes les semaine du mois
while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
{
	$date2->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
	$semaine[$nb_semaine_fin]["fin"]=$date2->format("d-m-Y"); //La fin de cette semaine
	$date2->modify('-6 day'); //on remonte au lundi
	$semaine[$nb_semaine_fin]["debut"]=$date2->format("d-m-Y"); //date de debut de la semaine
	$nb_semaine_fin --; //on passe a la semaine d'avant
}
dès que vous sortez de la boucle, votre variable "n'existe plus". Donc ce qu'il faut que vous fassiez, c'est déclarer votre variable en préalable à la boucle, et y instancier un tableau.

Code :
1
2
3
4
5
6
//stockage dans une variable de toutes les semaine du mois
$semaine = array();
while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
{
...
}

HTH.
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 10h56   #17
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Citation:
Envoyé par Agnello Fabrice Voir le message
...
dès que vous sortez de la boucle, votre variable "n'existe plus". Donc ce qu'il faut que vous fassiez, c'est déclarer votre variable en préalable à la boucle, et y instancier un tableau.
Moi je pense plutôt que le problème se pose dans la condition de boucle:
Code :
1
2
3
4
5
6
 
$nb_semaine_debut= 49 // numéro de semaine de 01-12-2011, début du mois de décembre
 
$nb_semaine_fin = 1 // numéro de semaine de 31-12-2011, fin du mois de décembre
 
while ($nb_semaine_fin >= $nb_semaine_debut)
Pour le mois de décembre, $nb_semaine_fin est plutôt inférieur à $nb_semaine_debut ce qui fauche la condition de boucle. Le 31-12-2011 rentre plutôt dans la première semaine de l'année suivante donc 2012.

Merci pour votre aide...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 18h25   #18
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
J'ai changé de logique.
Merci à vous tous, car vos posts m'ont permis de maitriser les dates.
okoweb 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 03h16.


 
 
 
 
Partenaires

Hébergement Web