par
Bisvan » 04 nov. 2008, 13:37
Alors j'ai fini par refaire un script (surement bcp plus brouillon que le tiens...

)
J'ai repris quelques idées sur le fonctionnement de ton script.
Je rappel que le but était d'afficher les semaines d'un mois donnée.
Les problèmes de mois commençant un lundi sont réglés.
<?php
/*
* AFFICHAGE DES SEMAINES D'UN MOIS DONNEE
*
*/
/*
* 1. PARAMETRES
*
*/
$jour = "01"; // 1er jour du mois
$mois = "11"; // mois
$annee = "2008"; // année
/*
* 2. CALCULS EN FONCTION DES PARAMETRES
*
*/
$mkdebut = mktime (0,0,0,$mois,$jour,$annee); // Timestamp UNIX du début premier jour du mois
$nbrejour = (int) date('t', $mkdebut); // Nombre de jour dans le mois
$mkfin = mktime (0,0,0,$mois,$nbrejour,$annee); // Timestamp UNIX du dernier jour du mois
$jourdebut = (int) date('w', $mkdebut); // Numéro dans la semaine du premier jour du mois
// (0=dim, 1=lundi, 2=mardi, 3=mer, 4=jeudi, 5=vend, 6=sam)
$jourfin = (int) date('w', $mkfin); // Numéro dans la semaine du dernier jour du mois
/*
* 3. FONCTION CALCUL DEBUT/FIN DE SEMAINE
*
* Cette fonction donne la date du début et de fin d'une semaine en fonction d'une date
* $x = 0 (pour la semaine en cours) | $x = 1 (pour la semaine précédente) | $x = 2 etc...
* $mois = le mois en cours
* $jour = le 1er jour du mois
* $annee = l'année en cours
* $jourdebut = Numéro dans la semaine du premier jour du mois
*
*/
function calculSem($x, $mois, $jour, $annee, $jourdebut)
{
$premier_jour = mktime(0,0,0,$mois,$jour-$jourdebut+1-$x*7,$annee);
$datedeb = date("d-m-Y", $premier_jour);
$dernier_jour= explode ("-",$datedeb);
$dernier_jour = strtotime("$dernier_jour[2]-$dernier_jour[1]-$dernier_jour[0]");
$dernier_jour = strtotime('+6 day', $dernier_jour);
$datefin = date("d-m-Y", $dernier_jour);
return array($datedeb, $datefin);
}
/*
* 4. CALCUL FINAL (Semaines du mois)
*
*
*/
// 4.1 Si le premier jour du mois est un lundi
if($jourdebut == 1)
{
// Boucle sur chaque jour du mois
for($i=1; $i <= $nbrejour; $i++)
{
// Calcul le numéro du jour de $i
$mk_i = mktime (0,0,0,$mois,$i,$annee);
$jour_i = (int) date('w', $mk_i);
// Si $i est un lundi
if($jour_i == 1)
{
// Récupération par la fonction du début et de la fin de semaine en cours
$retour_semaine= calculSem(0, $mois, $i, $annee, 1);
$retour_semaine_expl=explode ("-",$retour_semaine[1]);
// Affichage de la date du début de la semaine en cours
echo $retour_semaine[0].' au ';
// si la fin de semaine n'est pas dans le même mois on affiche le dernier jour du mois
if($retour_semaine_expl[1] != $mois)
{echo $nbrejour.'-'.$mois.'-'.$annee;}
// si la fin de semaine est dans le même mois on affiche le dernier jour de la semaine
elseif($retour_semaine_expl[1] == $mois)
{echo $retour_semaine[1].'<BR>';}
}
}
}
// 4.2 Si le premier jour du mois n'est pas un lundi
else
{
// Récupération par la fonction du début et de la fin de la premiere semaine du mois
$retour_semaine= calculSem(0, $mois, $jour, $annee, $jourdebut);
$retour_semaine_expl=explode ("-",$retour_semaine[1]);
// Affichage premier jour du mois
echo $jour.'-'.$mois.'-'.$annee.' au ';
// Affichage dernier jour de la première semaine du mois
echo $retour_semaine_expl[0].'-'.$retour_semaine_expl[1].'-'.$retour_semaine_expl[2].'<BR>';
// On ajoute 1 pour revenir au premier jour de la seconde semaine du mois
$ideb=$retour_semaine_expl[0]+1;
// Boucle sur chaque jour du mois à partir de la seconde semaine (commençant donc un lundi)
for($i=$ideb; $i <= $nbrejour; $i++)
{
// Calcul le numéro du jour de $i
$mk_i = mktime (0,0,0,$mois,$i,$annee);
$jour_i = (int) date('w', $mk_i);
// Si $i est un lundi
if($jour_i == 1)
{
// Récupération du premier et du dernier jour de la semaine en cours
$retour_semaine= calculSem(0, $mois, $i, $annee, 1);
$retour_semaine_expl=explode ("-",$retour_semaine[1]);
// Affichage de la date du début de la semaine en cours
echo $retour_semaine[0].' au ';
// Si la fin de semaine n'est pas dans le même mois on affiche le dernier jour du mois
if($retour_semaine_expl[1] != $mois)
{echo $nbrejour.'-'.$mois.'-'.$annee;}
// Si la fin de semaine est dans le même mois on affiche le dernier jour de la semaine
elseif($retour_semaine_expl[1] == $mois)
{echo $retour_semaine[1].'<BR>';}
}
}
}
?>
En espérant que cela aidera des personnes qui ont ce besoin (ou alors c'est simplement moi qui suis complètement barré avec mes idées
Encore merci HyWaN pour ta patience et ton aide

Alors j'ai fini par refaire un script (surement bcp plus brouillon que le tiens...:oops: )
J'ai repris quelques idées sur le fonctionnement de ton script.
Je rappel que le but était d'afficher les semaines d'un mois donnée.
Les problèmes de mois commençant un lundi sont réglés.
[php]
<?php
/*
* AFFICHAGE DES SEMAINES D'UN MOIS DONNEE
*
*/
/*
* 1. PARAMETRES
*
*/
$jour = "01"; // 1er jour du mois
$mois = "11"; // mois
$annee = "2008"; // année
/*
* 2. CALCULS EN FONCTION DES PARAMETRES
*
*/
$mkdebut = mktime (0,0,0,$mois,$jour,$annee); // Timestamp UNIX du début premier jour du mois
$nbrejour = (int) date('t', $mkdebut); // Nombre de jour dans le mois
$mkfin = mktime (0,0,0,$mois,$nbrejour,$annee); // Timestamp UNIX du dernier jour du mois
$jourdebut = (int) date('w', $mkdebut); // Numéro dans la semaine du premier jour du mois
// (0=dim, 1=lundi, 2=mardi, 3=mer, 4=jeudi, 5=vend, 6=sam)
$jourfin = (int) date('w', $mkfin); // Numéro dans la semaine du dernier jour du mois
/*
* 3. FONCTION CALCUL DEBUT/FIN DE SEMAINE
*
* Cette fonction donne la date du début et de fin d'une semaine en fonction d'une date
* $x = 0 (pour la semaine en cours) | $x = 1 (pour la semaine précédente) | $x = 2 etc...
* $mois = le mois en cours
* $jour = le 1er jour du mois
* $annee = l'année en cours
* $jourdebut = Numéro dans la semaine du premier jour du mois
*
*/
function calculSem($x, $mois, $jour, $annee, $jourdebut)
{
$premier_jour = mktime(0,0,0,$mois,$jour-$jourdebut+1-$x*7,$annee);
$datedeb = date("d-m-Y", $premier_jour);
$dernier_jour= explode ("-",$datedeb);
$dernier_jour = strtotime("$dernier_jour[2]-$dernier_jour[1]-$dernier_jour[0]");
$dernier_jour = strtotime('+6 day', $dernier_jour);
$datefin = date("d-m-Y", $dernier_jour);
return array($datedeb, $datefin);
}
/*
* 4. CALCUL FINAL (Semaines du mois)
*
*
*/
// 4.1 Si le premier jour du mois est un lundi
if($jourdebut == 1)
{
// Boucle sur chaque jour du mois
for($i=1; $i <= $nbrejour; $i++)
{
// Calcul le numéro du jour de $i
$mk_i = mktime (0,0,0,$mois,$i,$annee);
$jour_i = (int) date('w', $mk_i);
// Si $i est un lundi
if($jour_i == 1)
{
// Récupération par la fonction du début et de la fin de semaine en cours
$retour_semaine= calculSem(0, $mois, $i, $annee, 1);
$retour_semaine_expl=explode ("-",$retour_semaine[1]);
// Affichage de la date du début de la semaine en cours
echo $retour_semaine[0].' au ';
// si la fin de semaine n'est pas dans le même mois on affiche le dernier jour du mois
if($retour_semaine_expl[1] != $mois)
{echo $nbrejour.'-'.$mois.'-'.$annee;}
// si la fin de semaine est dans le même mois on affiche le dernier jour de la semaine
elseif($retour_semaine_expl[1] == $mois)
{echo $retour_semaine[1].'<BR>';}
}
}
}
// 4.2 Si le premier jour du mois n'est pas un lundi
else
{
// Récupération par la fonction du début et de la fin de la premiere semaine du mois
$retour_semaine= calculSem(0, $mois, $jour, $annee, $jourdebut);
$retour_semaine_expl=explode ("-",$retour_semaine[1]);
// Affichage premier jour du mois
echo $jour.'-'.$mois.'-'.$annee.' au ';
// Affichage dernier jour de la première semaine du mois
echo $retour_semaine_expl[0].'-'.$retour_semaine_expl[1].'-'.$retour_semaine_expl[2].'<BR>';
// On ajoute 1 pour revenir au premier jour de la seconde semaine du mois
$ideb=$retour_semaine_expl[0]+1;
// Boucle sur chaque jour du mois à partir de la seconde semaine (commençant donc un lundi)
for($i=$ideb; $i <= $nbrejour; $i++)
{
// Calcul le numéro du jour de $i
$mk_i = mktime (0,0,0,$mois,$i,$annee);
$jour_i = (int) date('w', $mk_i);
// Si $i est un lundi
if($jour_i == 1)
{
// Récupération du premier et du dernier jour de la semaine en cours
$retour_semaine= calculSem(0, $mois, $i, $annee, 1);
$retour_semaine_expl=explode ("-",$retour_semaine[1]);
// Affichage de la date du début de la semaine en cours
echo $retour_semaine[0].' au ';
// Si la fin de semaine n'est pas dans le même mois on affiche le dernier jour du mois
if($retour_semaine_expl[1] != $mois)
{echo $nbrejour.'-'.$mois.'-'.$annee;}
// Si la fin de semaine est dans le même mois on affiche le dernier jour de la semaine
elseif($retour_semaine_expl[1] == $mois)
{echo $retour_semaine[1].'<BR>';}
}
}
}
?>
[/php]
En espérant que cela aidera des personnes qui ont ce besoin (ou alors c'est simplement moi qui suis complètement barré avec mes idées :lol:
Encore merci HyWaN pour ta patience et ton aide :)