Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Kalendarz tygodniowy PHP
Forum PHP.pl > Forum > Przedszkole
CichyBaczek
Witam.
Mam takowy problem, którego kompletnie nie umiem zrobić. Muszę zrobić projekt, w którym mam takie oto zadanie:
"Utwórz kalendarz tygodniowy z przyciskami nawigacyjnymi który wyświetli nr aktualnego tygodnia, wyróżnij aktualna datę oraz nazwę miesiąca. Przyciski pozwalają przełączać się między tygodniami."
Znalazłem taki oto kod, ale nie wiem jak go przerobić, żebym mógł przełączać się co tydzień i żeby wyświetlał tylko jeden tydzień a nie cały miesiąc.
Za pomoc z góry dziękuję.
  1. <?PHP
  2. function printCalendar()
  3. {
  4. $year = date("Y");
  5. $monthNum = date("n");
  6. $daysofmonth = date("t");
  7. $dayofweek = date("w");
  8. $dayofmonth = date("j");
  9. $firstdayofmonth = date("w", mktime(0,0,0,$monthNum, 1, $year));
  10.  
  11. if($dayofweek == 0) $dayofweek = 7;
  12. if($firstdayofmonth == 0) $firstdayofmonth = 7;
  13.  
  14. switch($monthNum){
  15. case 1 : $monthName = "Styczeń";break;
  16. case 2 : $monthName = "Luty";break;
  17. case 3 : $monthName = "Marzec";break;
  18. case 4 : $monthName = "Kwiecień";break;
  19. case 5 : $monthName = "Maj";break;
  20. case 6 : $monthName = "Czerwiec";break;
  21. case 7 : $monthName = "Lipiec";break;
  22. case 8 : $monthName = "Sierpień";break;
  23. case 9 : $monthName = "Wrzesień";break;
  24. case 10 : $monthName = "Październik";break;
  25. case 11 : $monthName = "Listopad";break;
  26. case 12 : $monthName = "Grudzień";break;
  27. }
  28.  
  29. echo("<TABLE border = 1><TR>");
  30. echo("<TD bgcolor=\"yellow\" align=\"center\" colspan=\"7\">");
  31. echo($monthName." ".$year);
  32. echo("</TD></TR><TR>");
  33. ?>
  34. <TR>
  35. <TD align="center" bgcolor="pink">Pn</TD>
  36. <TD align="center" bgcolor="pink">Wt</TD>
  37. <TD align="center" bgcolor="pink">Sr</TD>
  38. <TD align="center" bgcolor="pink">Cz</TD>
  39. <TD align="center" bgcolor="pink">Pi</TD>
  40. <TD align="center" bgcolor="pink">So</TD>
  41. <TD align="center" bgcolor="pink">Nd</TD>
  42. </TR>
  43. <?
  44. $j = $daysofmonth + $firstdayofmonth - 1;
  45.  
  46. for($i = 0; $i < $j; $i++){
  47. if($i < $firstdayofmonth - 1){
  48. echo("<TD bgcolor=\"white\"></TD>");
  49. continue;
  50. }
  51. if(($i % 7) == 0){
  52. echo("</TR><TR>");
  53. }
  54. if(($i - $firstdayofmonth + 2) == $dayofmonth){
  55. $color = "yellow";
  56. }
  57. else{
  58. $color = "green";
  59. }
  60. echo("<TD bgcolor=\"$color\" align=\"center\">");
  61. echo($i - $firstdayofmonth + 2);
  62. echo("</TD>");
  63. }
  64. echo("</TR></TABLE>");
  65. }
  66. printCalendar();
  67. ?>
Kshyhoo
Zapoznaj się z panującymi na Forum zasadami. Przenoszę.
Comandeer
Ten kod ma wywaloną notkę odnośnie copyright - pochodzi z książki Marcina Lisa "101 praktycznych skryptów PHP" http://helion.pl/ksiazki/php-101-praktyczn...-lis,php102.htm

Co do przełączania między tygodniami - nie lepiej będzie oprzeć to na DateTime?
  1. $date = new DateTime();
  2. $date->add(new DateInterval('P1W'));
  3. echo $date->format('Y-m-d') . "\n";

A jak nie, to zostaje strtotime:
  1. echo date('Y-m-d', strtotime('+ 1 week'));


Co do wyświetlania jednego tygodnia: jeśli wiesz jaki dziś mamy dzień i który to dzień tygodnia, to łatwo obliczyć którego musi się ten tydzień zacząć i którego skończyć wink.gif
CichyBaczek
Zrobiłem z kolegą takie coś:
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?PHP
  6.  
  7.  
  8. $year = date("Y");
  9. $monthNum = date("n");
  10. $daysofmonth = date("t");
  11. $dayofweek = date("w");
  12. $dayofmonth = date("j");
  13. $firstdayofmonth = date("w", mktime(0,0,0,$monthNum, 1, $year));
  14.  
  15.  
  16. if (isset($_POST['wstecz']))
  17. {
  18. $fp=fopen("wstecz.txt","w+");
  19. $stare=fread($fp, 100);
  20. $nowe=$stare+1;
  21. fputs($fp, $nowe);
  22.  
  23. $dayofmonth=$dayofmonth-7*$nowe;
  24.  
  25.  
  26. }
  27.  
  28.  
  29. if (isset($_POST['dalej']))
  30. {
  31. $fp=fopen("dalej.txt","w+");
  32. $stare=fread($fp, 100);
  33. $nowe=$stare+1;
  34. fputs($fp, $nowe);
  35.  
  36. $dayofmonth=$dayofmonth+7*$nowe;
  37.  
  38.  
  39. }
  40.  
  41.  
  42.  
  43. if($dayofweek == 0) $dayofweek = 7;
  44. if($firstdayofmonth == 0) $firstdayofmonth = 7;
  45.  
  46. switch($monthNum){
  47. case 1 : $monthName = "Styczeń";break;
  48. case 2 : $monthName = "Luty";break;
  49. case 3 : $monthName = "Marzec";break;
  50. case 4 : $monthName = "Kwiecień";break;
  51. case 5 : $monthName = "Maj";break;
  52. case 6 : $monthName = "Czerwiec";break;
  53. case 7 : $monthName = "Lipiec";break;
  54. case 8 : $monthName = "Sierpień";break;
  55. case 9 : $monthName = "Wrzesień";break;
  56. case 10 : $monthName = "Październik";break;
  57. case 11 : $monthName = "Listopad";break;
  58. case 12 : $monthName = "Grudzień";break;
  59. }
  60.  
  61. echo("<TABLE><TR>");
  62. echo("<TD bgcolor='yellow' align='center' colspan='7'>");
  63. echo($monthName." ".$year);
  64. echo('</TD></TR><TR>');
  65. ?>
  66. <TR>
  67. <TD align="center" bgcolor="pink">Pn</TD>
  68. <TD align="center" bgcolor="pink">Wt</TD>
  69. <TD align="center" bgcolor="pink">Sr</TD>
  70. <TD align="center" bgcolor="pink">Cz</TD>
  71. <TD align="center" bgcolor="pink">Pi</TD>
  72. <TD align="center" bgcolor="pink">So</TD>
  73. <TD align="center" bgcolor="pink">Nd</TD>
  74. </TR>
  75.  
  76. <?php
  77. $j = $daysofmonth + $firstdayofmonth - 1;
  78. $i=$dayofmonth-$dayofweek +4;
  79. $k=1;
  80.  
  81. while ($i < $j){
  82. /* if($i < $firstdayofmonth - 1){
  83.   echo("<TD bgcolor='white'></TD>");
  84.   continue;
  85.   }
  86.  
  87.   if(($i % 7) == 0){
  88.   echo("</TR><TR>");
  89.   }*/
  90. if(($i - $firstdayofmonth + 2) == $dayofmonth){
  91. $color = "yellow";
  92. }
  93. else{
  94. $color = "green";
  95. }
  96. echo("<TD bgcolor='$color' align='center'>");
  97. echo($i - $firstdayofmonth + 2);
  98. echo("</TD>");
  99.  
  100.  
  101. if($dayofweek==1 and $i - $firstdayofmonth + 2==$dayofmonth+6 )
  102. {
  103. echo ("</table>");
  104. break;}
  105.  
  106.  
  107. if($dayofweek==2 and $i - $firstdayofmonth + 2==$dayofmonth+5 )
  108. {
  109. echo ("</table>");
  110. break;}
  111.  
  112.  
  113. if($dayofweek==3 and $i - $firstdayofmonth + 2==$dayofmonth+4 )
  114. {
  115. echo ("</table>");
  116. break;}
  117.  
  118.  
  119. if($dayofweek==4 and $i - $firstdayofmonth + 2==$dayofmonth+3 )
  120. {
  121. echo ("</table>");
  122. break;}
  123.  
  124.  
  125. if($dayofweek==5 and $i - $firstdayofmonth + 2==$dayofmonth+2 )
  126. {
  127. echo ("</table>");
  128. break;}
  129.  
  130. if($dayofweek==6 and $i - $firstdayofmonth + 2==$dayofmonth+1 )
  131. {
  132. echo ("</table>");
  133. break;}
  134.  
  135. if($dayofweek==7 and $i - $firstdayofmonth + 2==$dayofmonth+0 )
  136. {
  137. echo ("</table>");
  138. break;}
  139. $i++;
  140. }
  141.  
  142. /**/
  143.  
  144.  
  145. ?>
  146. <form action="index.php" method="POST">
  147. <button name="wstecz" > wstecz </button>
  148. <button name="dalej" > dalej </button>
  149. </form>
  150.  
  151. </body>
  152. </html>


Gdy wciskam przyciski to przeskakuje mi tylko o jeden tydzień i nie umiem zrobić pętli żeby za każdym razem gdy wcisne przycisk, przechodziło mi na kolejny tydzień.
Za odpowiedź z góry dziękuję.
Comandeer
Można np.aktualny tydzień trzymać w sesji i na podstawie tego obliczać
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.