Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] kalendarz miesięczny
Forum PHP.pl > Forum > Przedszkole
rybosom
mam prosty kalendarz

  1. <?
  2. $dni = array('1'=>"Niedziela", '2'=>"Poniedziałek", '3'=>"Wtorek", '4'=>"Środa", '5'=>"Czwartek", '6'=>"Piątek", '7'=>"Sobota");
  3. $miesiace = Array("Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec","Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień");
  4.  
  5. if (!isset($_REQUEST["m"])) $_REQUEST["m"] = date("n");
  6. if (!isset($_REQUEST["y"])) $_REQUEST["y"] = date("Y");
  7.  
  8. $obecnymiesiac = $_REQUEST["m"];
  9. $obecnyrok = $_REQUEST["y"];
  10.  
  11. $p_rok = $obecnyrok;
  12. $n_rok = $obecnyrok;
  13. $p_miesiac = $obecnymiesiac-1;
  14. $n_miesiac = $obecnymiesiac+1;
  15.  
  16. if ($p_miesiac == 0 ) {
  17. $p_miesiac = 12;
  18. $p_rok = $obecnyrok - 1;
  19. }
  20.  
  21. if ($n_miesiac == 13 ) {
  22. $n_miesiac = 1;
  23. $n_rok = $obecnyrok + 1;
  24. }
  25. ?>
  26. <table width="100%" border="1" cellpadding="2" cellspacing="2">
  27. <tr align="center">
  28. <td colspan="7"><? echo $miesiace[$obecnymiesiac-1].' '.$obecnyrok; ?></td>
  29. </tr>
  30. <tr >
  31. <? for($i=1;$i<=7;$i++){ ?>
  32. <td width="120px" align="center"><b><? echo $dni[$i]; ?></b></td>
  33. <? } ?>
  34. </tr>
  35. <?
  36. $timestamp = mktime(0,0,0,$obecnymiesiac,1,$obecnyrok);
  37. $maxday = date("t",$timestamp);
  38. $tenmiesiac = getdate ($timestamp);
  39. $startday = $tenmiesiac['wday'];
  40. for ($i=0; $i<($maxday+$startday); $i++) {
  41. if(($i % 7) == 0 ) echo "<tr>";
  42. if($i < $startday) echo "<td ></td>";
  43. else echo "<td align='center' height='80' valign='middle' height='20px'><font size='20px'>". ($i - $startday + 1) . "</font></td>";
  44. if(($i % 7) == 6 ) echo "</tr>";
  45. }
  46. ?>
  47. </table>


jak zmienić kod aby
1. Poniedziałek był pierwszy a Sobota i Niedziela na końcu
2. wyróżnić aktualny dzień
3. wyróżnić kolumny Sobota i Niedziela
nospor
No jak chcesz zmienic kolejnosc dni tygodnia, to nie sadzisz ze trzeba to zrobic w tej tablicy
$dni = array('1'=>"Niedziela", '2'=>"Poniedziałek", '3'=>"Wtorek", '4'=>"Środa", '5'=>"Czwartek", '6'=>"Piątek", '7'=>"Sobota");
?
rybosom
no dobra, zmieniłem na
  1. $dni = array('7'=>"Niedziela", '1'=>"Poniedziałek", '2'=>"Wtorek", '3'=>"Środa", '4'=>"Czwartek", '5'=>"Piątek", '6'=>"Sobota");

i Poniedziałek jest 1 ale za to pokazuje ze 5 czerwiec to piątek.
nospor

$dni = array('1'=>"Poniedziałek", '2'=>"Wtorek", '3'=>"Środa", '4'=>"Czwartek", '5'=>"Piątek", '6'=>"Sobota",'7'=>"Niedziela");

wday jeszcze zwraca dni w zlym formacie stad problem
rybosom
dodałem 6

  1. $startday = $tenmiesiac['wday'] + 6;
i niby jest ok ale dlaczego musiałem dodać właśnie 6?
nospor
  1. $startday = $tenmiesiac['wday'];
  2. if ($startday==0)
  3. $startday = 7;
  4.  
  5. for ($i=0; $i<($maxday+$startday); $i++) {
  6.  
  7. if(($i % 7) == 0 ) echo "<tr>";
  8.  
  9. if($i - $startday + 2 <= 0) echo "<td ></td>";
  10.  
  11. else
  12. echo "<td align='center' height='80' valign='middle' height='20px'><font size='20px'>". ($i - $startday + 2) . "</font></td>";
  13.  
  14. if(($i % 7) == 6 ) echo "</tr>";
  15.  
  16. }
rybosom
nospor, Twoja propozycja powoduje że miesiąc ma o 1 dzień za dużo.

ja zrobiłem inaczej
  1. <style type="text/css">
  2. .dzien_pasywny{background-color:#fff;color:#000;font-size:xx-large;height:80px;text-align:center;vertical-align:middle;border-color:blue;border-style:none;border-width:1px;padding:5px}
  3. .dzien_aktywny{border:1px;background-color:#808080;color:#fff;font-size:xx-large;height:80px;text-align:center;vertical-align:middle}
  4. .belka{background-color:#fff;color:#000;height:30px;width:120px;text-align:center;vertical-align:middle}
  5. </style>
  6. <?
  7. $dni = array('1'=>"Poniedziałek", '2'=>"Wtorek", '3'=>"Środa", '4'=>"Czwartek", '5'=>"Piątek", '6'=>"Sobota", '7'=>"Niedziela");
  8. $miesiace = Array("Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień");
  9.  
  10. $obecny_dzien = date("d");
  11. $obecny_miesiac = date("n");
  12. $obecny_rok = date("Y");
  13. $timestamp = mktime(0,0,0,$obecny_miesiac,1,$obecny_rok);
  14. $tenmiesiac = getdate($timestamp);
  15. $start = $tenmiesiac['wday'] + 6;
  16. $max = date("t",$timestamp);
  17.  
  18. echo '<table width="100%" border="0">';
  19. echo '<tr><td class="belka" colspan="7"><b>' . $miesiace[$obecny_miesiac-1].' '.$obecny_rok . '</b></td></tr>';
  20.  
  21. echo '<tr>';
  22. for($i=1;$i<=7;$i++){
  23. echo '<td class="belka"><b>'. $dni[$i] .'</b></td>';
  24. }
  25. echo '</tr>';
  26.  
  27. for ($i=0; $i<($max+$start); $i++) {
  28. if(($i % 7) == 0 ) echo "<tr>";
  29. if($i < $start){
  30. echo "<td></td>";
  31. } else {
  32. echo ($i - $start + 1 == $obecny_dzien) ? '<td class="dzien_aktywny">'. ($i - $start + 1) .'</td>' : '<td class="dzien_pasywny">'. ($i - $start + 1) .'</td>';
  33. }
  34. if(($i % 7) == 6 ) echo "</tr>";
  35. }
  36. ?>
  37. </table>


pozostało mi jedynie jakoś oznaczyć na szaro kolumny Sobota i Niedziela.

Czy można jeszcze uprościć/zoptymalizować źródło?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.