par
m4cfly » 02 avr. 2010, 08:14
Bien le bonjour,
Je viens de terminer de coder une fonction simple qui me génère un calendrier à partir d'un mois et d'une année.
La fonction est appelée comme ceci (dans cet exemple, pour Avril 2010) :
echo getCalendar('04-2010');
et voici la fonction :
function getCalendar($value)
{
$workValues = explode('-', $value);
$month = $workValues[0];
$year = $workValues[1];
$currentDay = date('d-m-Y');
$firstDay = date('N', mktime(0, 0, 0, $month, 1, $year)); // position dans la semaine du premier jour du mois
$lastDay = date('t', mktime(0, 0, 0, $month, 1, $year)); // nombre de jours dans le mois
$firstWeek = date('W', mktime(0, 0, 0, $month, 1, $year)); // numéro de la première semaine du mois
$lastWeek = date('W', mktime(0, 0, 0, $month, $lastDay, $year)); // numéro de la dernière semaine du mois
$monthWeeks = ($lastWeek + 1) - $firstWeek; // nombre de semaines dans le mois
$calendar = ' <table>
<tr>
<th scope="col"><acronym title="Lundi">Lu</acronym></th>
<th scope="col"><acronym title="Mardi">Ma</acronym></th>
<th scope="col"><acronym title="Mercredi">Me</acronym></th>
<th scope="col"><acronym title="Jeudi">Je</acronym></th>
<th scope="col"><acronym title="Vendredi">Ve</acronym></th>
<th scope="col"><acronym title="Samedi">Sa</acronym></th>
<th scope="col"><acronym title="Dimanche">Di</acronym></th>
</tr>
';
$step = 1;
$currentWeek = 1;
$day = 1;
while ($currentWeek <= $monthWeeks)
{
$calendar .= " <tr>";
for ($i = 1; $i <= 7; $i++)
{
if (($step >= $firstDay)
&& ($day <= $lastDay))
{
if ($currentDay == date('d-m-Y', mktime(0, 0, 0, $month, $day, $year)))
{ $id = ' id="current"'; } else { $id = ''; }
$calendar .= "\n <td$id><p>$day</p></td>";
$day++;
}
else { $calendar .= "\n <td><p></p></td>"; }
$step++;
}
$calendar .= "\n </tr>\n";
$currentWeek++;
}
$calendar .= " </table>\n";
return $calendar;
}
Cela fonctionne parfaitement pour n'importe quelle combinaison de mois/année
sauf pour janvier 2010 (donc 01-2010).
Auriez-vous une idée quant à l'origine de ce problème ?
Merci d'avance

Bien le bonjour,
Je viens de terminer de coder une fonction simple qui me génère un calendrier à partir d'un mois et d'une année.
La fonction est appelée comme ceci (dans cet exemple, pour Avril 2010) :
[php]echo getCalendar('04-2010');[/php]
et voici la fonction :
[php]function getCalendar($value)
{
$workValues = explode('-', $value);
$month = $workValues[0];
$year = $workValues[1];
$currentDay = date('d-m-Y');
$firstDay = date('N', mktime(0, 0, 0, $month, 1, $year)); // position dans la semaine du premier jour du mois
$lastDay = date('t', mktime(0, 0, 0, $month, 1, $year)); // nombre de jours dans le mois
$firstWeek = date('W', mktime(0, 0, 0, $month, 1, $year)); // numéro de la première semaine du mois
$lastWeek = date('W', mktime(0, 0, 0, $month, $lastDay, $year)); // numéro de la dernière semaine du mois
$monthWeeks = ($lastWeek + 1) - $firstWeek; // nombre de semaines dans le mois
$calendar = ' <table>
<tr>
<th scope="col"><acronym title="Lundi">Lu</acronym></th>
<th scope="col"><acronym title="Mardi">Ma</acronym></th>
<th scope="col"><acronym title="Mercredi">Me</acronym></th>
<th scope="col"><acronym title="Jeudi">Je</acronym></th>
<th scope="col"><acronym title="Vendredi">Ve</acronym></th>
<th scope="col"><acronym title="Samedi">Sa</acronym></th>
<th scope="col"><acronym title="Dimanche">Di</acronym></th>
</tr>
';
$step = 1;
$currentWeek = 1;
$day = 1;
while ($currentWeek <= $monthWeeks)
{
$calendar .= " <tr>";
for ($i = 1; $i <= 7; $i++)
{
if (($step >= $firstDay)
&& ($day <= $lastDay))
{
if ($currentDay == date('d-m-Y', mktime(0, 0, 0, $month, $day, $year)))
{ $id = ' id="current"'; } else { $id = ''; }
$calendar .= "\n <td$id><p>$day</p></td>";
$day++;
}
else { $calendar .= "\n <td><p></p></td>"; }
$step++;
}
$calendar .= "\n </tr>\n";
$currentWeek++;
}
$calendar .= " </table>\n";
return $calendar;
}[/php]
Cela fonctionne parfaitement pour n'importe quelle combinaison de mois/année [b]sauf pour janvier 2010 (donc 01-2010)[/b].
Auriez-vous une idée quant à l'origine de ce problème ?
Merci d'avance ;)