Echo tous les mois avec jours calendrier
Je suis en utilisant le code ci-dessous à l'écho le mois en cours. Comment puis-je l'améliorer, ainsi que des spectacles tous les mois avec les noms et les jours et les dates..
Code:
<?php
$today = getdate();
$firstDay = getdate(mktime(0,0,0,$today['mon'],1,$today['year']));
$lastDay = getdate(mktime(0,0,0,$today['mon']+1,0,$today['year']));
?>
<?php
echo '<table>';
echo ' <tr><th colspan="7">'.$today['month']." - ".$today['year']."</th></tr>";
echo '<tr class="days">';
echo ' <td>Mo</td><td>Tu</td><td>We</td><td>Th</td>';
echo ' <td>Fr</td><td>Sa</td><td>Su</td></tr>';
?>
<?php
echo '<tr>';
for($i=1;$i<$firstDay['wday'];$i++){
echo '<td> </td>';
}
$actday = 0;
for($i=$firstDay['wday'];$i<=7;$i++){
$actday++;
echo "<td>$actday</td>";
}
echo '</tr>';
?>
<?php
$fullWeeks = floor(($lastDay['mday']-$actday)/7);
for ($i=0;$i<$fullWeeks;$i++){
echo '<tr>';
for ($j=0;$j<7;$j++){
$actday++;
echo "<td>$actday</td>";
}
echo '</tr>';
}
?>
<?php
if ($actday < $lastDay['mday']){
echo '<tr>';
for ($i=0; $i<7;$i++){
$actday++;
if ($actday <= $lastDay['mday']){
echo "<td>$actday</td>";
}
else {
echo '<td> </td>';
}
}
echo '</tr>';
}
?>
- php.net/date ou avez-vous des problèmes particuliers?
- Pas de problèmes. Ce code est bien, mais je veux que tous les mois, pas juste l'actuel.
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
il retournera un tableau de mois->semaines->jour>jour de la semaine de l'année, vous passer à la fonction. J'espère que ça doit être facile à parcourir à travers la matrice pour imprimer tout. Suis sûr qu'il ya beaucoup de réglages que vous pouvez faire pour que, mais c'est un début.
Je voudrais aussi essayer et rester loin de l'impression de html à l'aide de l'écho, par exemple, au lieu de;
faire;
De rend le code plus lisible je pense.
EDIT: Juste pensé que je devrais inclure un exemple d'un cas d'utilisation en tant que bien, comme ci-dessous:
Qui vous donne la sortie:
$dates[$month][$wk][$wkDay] = $day;
au lieu de$dates[$month][$wk][$day] = $wkDay;
dans votre fonction.La meilleure réponse a une inexactitude! Vous devez ajouter une condition si l'année est bissextile AVANT un cycle, sinon vous aurez des problèmes avec la sortie des premiers jours du premier mois voir la capture d'écran.
La condition nécessaire:
date("L", mktime(0,0,0, 7,7, $year)) ? $days = 366 : $days = 365;
(si l'année est bissextile alors le compteur de cycle = 366 ailleurs 365)
Envelopper votre code dans une fonction, puis passer un argument à elle avec votre date souhaitée.