Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Kalendarz tygodniowy PHP
CichyBaczek
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.05.2015
Skąd: Nie wiem

Ostrzeżenie: (0%)
-----


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. ?>
Powód edycji: [Kshyhoo]: bb-code, tagi
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Zapoznaj się z panującymi na Forum zasadami. Przenoszę.
Go to the top of the page
+Quote Post
Comandeer
post
Post #3





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


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ć (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
CichyBaczek
post
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.05.2015
Skąd: Nie wiem

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
Comandeer
post
Post #5





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Można np.aktualny tydzień trzymać w sesji i na podstawie tego obliczać
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.12.2025 - 18:01