Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Kalendarz, pola z innego miesiąca
shpaque
post 29.05.2018, 08:34:08
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Witam serdecznie,
przerabiam sobie skrypt znaleziony w sieci - jest ok, pytanie tylko jak w nim zrobic, zeby pokazywal do pelnej tabeli dni miesiaca poprzedniego i kolejnego (np teraz w maju mamy poniedzialek 30 kwiecien i 1,2,3 czerwiec jeszcze w tym tygodniu) - zeby je pokazac sobie gdzies lekko na szaro, kod ponizej:

  1. $year = date('Y');
  2. $monthNum = date('n');
  3. $daysOfMonth = date('t');
  4. $dayOfWeek = date('w');
  5. $dayOfMonth = date('j');
  6. $firstDayOfMonth = date('w', mktime(0, 0, 0, $monthNum, 1, $year));
  7.  
  8. if ($dayOfWeek == 0) $dayOfWeek = 7;
  9. if ($firstDayOfMonth == 0) $firstDayOfMonth = 7;
  10.  
  11. switch ($monthNum)
  12. {
  13. case 1: $monthName = "Styczeń"; break;
  14. case 2: $monthName = "Luty"; break;
  15. case 3: $monthName = "Marzec"; break;
  16. case 4: $monthName = "Kwiecień"; break;
  17. case 5: $monthName = "Maj"; break;
  18. case 6: $monthName = "Czerwiec"; break;
  19. case 7: $monthName = "Lipiec"; break;
  20. case 8: $monthName = "Sierpień"; break;
  21. case 9: $monthName = "Wrzesień"; break;
  22. case 10: $monthName = "Październik"; break;
  23. case 11: $monthName = "Listopad"; break;
  24. case 12: $monthName = "Grudzień"; break;
  25. }
  26. ?>
  27.  
  28. <table id="tableSzkolenia">
  29. <tbody>
  30. <tr id="head-row">
  31. <th class="zmiana left" style="height: 50px;"><span class="fa fa-chevron-left icon-sm"></span></th>
  32. <th class="text-center" style="height: 50px; padding: 10px;" colspan="5"><?php echo $monthName." ".$year; ?></th>
  33. <th class="zmiana right" style="height: 50px;"><span class="fa fa-chevron-right icon-sm"></span></th>
  34. </tr>
  35. <tr id="days-row">
  36. <th>Pon</th>
  37. <th>Wt</th>
  38. <th>Śr</th>
  39. <th>Czw</th>
  40. <th>Pt</th>
  41. <th>Sob</th>
  42. <th>Nd</th>
  43. </tr>
  44.  
  45. <?php
  46. $j = $daysOfMonth + $firstDayOfMonth - 1;
  47.  
  48. for ($i = 0; $i < $j; $i++)
  49. {
  50. if ($i < $firstDayOfMonth - 1)
  51. {
  52. echo("<TD bgcolor=\"transparent\"></TD>");
  53. continue;
  54. }
  55.  
  56. if (($i % 7) == 0)
  57. {
  58. echo("</TR><TR>");
  59. }
  60.  
  61. if (($i - $firstDayOfMonth + 2) == $dayOfMonth)
  62. {
  63. $color = "#ffb900";
  64. }
  65. else
  66. {
  67. $color = "#f6f6f6";
  68. }
  69.  
  70. echo "<td class=\"tdSzkolenia\" style=\"background: $color;\">$i</td>";
  71. }
  72. ?>
  73. </tbody>
  74. </table>
Go to the top of the page
+Quote Post
vokiel
post 29.05.2018, 10:37:08
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Pobierz dzień tygodnia pierwszego dnia miesiąca i uzupełnij daty o dni z poprzedniego miesiąca, od początku tygodnia do tego dnia.
Pobierz ostatni dzień tygodnia danego miesiąca i uzupełnij daty o dni z następnego miesiąca do końca tygodnia.

Możesz też pobrać numery tygodni dla pierwszego i ostatniego dnia miesiąca i wygenerować wszystkie daty dla tych tygodni.

BTW. DateTime Class Twoim przyjacielem ;-)


--------------------
Go to the top of the page
+Quote Post
shpaque
post 29.05.2018, 15:01:20
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Na razie utknąłem jeszcze z inną rzeczą - ponieważ dorobiłem możliwość zmiany miesiąca, inne pokazują początek w dobry dzien tygodnia, ale ich numeracja zaczyna się różnie (np pazdziernik od 4. do 34.)

  1. $year = date('Y');
  2. $monthNum = date('n');
  3. $daysOfMonth = date('t');
  4. $dayOfWeek = date('w');
  5. $dayOfMonth = date('j');
  6. $firstDayOfMonth = date('w', mktime(0, 0, 0, $monthNum, 1, $year));
  7.  
  8. if ( (isset($_GET['m'])) && (isset($_GET['y'])) )
  9. {
  10. $year = $_GET['y'];
  11. $monthNum = $_GET['m'];
  12. $daysOfMonth = date('t', strtotime(date($year."-".$monthNum."-01")));
  13. $dayOfWeek = date('w', strtotime(date($year."-".$monthNum."-01")));
  14. $firstDayOfMonth = date('w', mktime(0, 0, 0, $monthNum, 1, $year));
  15. }
  16.  
  17. if ($dayOfWeek == 0) {$dayOfWeek = 7;}
  18. if ($firstDayOfMonth == 0) {$firstDayOfMonth = 7;}
  19.  
  20. switch ($monthNum)
  21. {
  22. case 1: $monthName = "Styczeń"; break;
  23. case 2: $monthName = "Luty"; break;
  24. case 3: $monthName = "Marzec"; break;
  25. case 4: $monthName = "Kwiecień"; break;
  26. case 5: $monthName = "Maj"; break;
  27. case 6: $monthName = "Czerwiec"; break;
  28. case 7: $monthName = "Lipiec"; break;
  29. case 8: $monthName = "Sierpień"; break;
  30. case 9: $monthName = "Wrzesień"; break;
  31. case 10: $monthName = "Październik"; break;
  32. case 11: $monthName = "Listopad"; break;
  33. case 12: $monthName = "Grudzień"; break;
  34. }
  35. ?>
  36.  
  37. <table id="tableSzkolenia">
  38. <tbody>
  39. <tr id="head-row">
  40.  
  41. <?php
  42. $prevMonth = $monthNum - 1;
  43. $nextMonth = $monthNum + 1;
  44. $prevYear = $year;
  45. $nextYear = $year;
  46. if ($prevMonth == 0) {$prevMonth = 12; $prevYear--;}
  47. if ($nextMonth == 13) {$nextMonth = 1; $nextYear++;}
  48. ?>
  49.  
  50. <th class="zmiana left" style="height: 50px;" onclick='location.href="./szkolenia.php?m=<?php echo $prevMonth; ?>&y=<?php echo $prevYear; ?>"'><span class="fa fa-chevron-left icon-sm"></span></th>
  51. <th class="text-center" style="height: 50px; padding: 10px;" colspan="5"><?php echo $monthName." ".$year; ?></th>
  52. <th class="zmiana right" style="height: 50px;" onclick='location.href="./szkolenia.php?m=<?php echo $nextMonth; ?>&y=<?php echo $nextYear; ?>"'><span class="fa fa-chevron-right icon-sm"></span></th>
  53. </tr>
  54. <tr id="days-row">
  55. <th>Pon</th>
  56. <th>Wt</th>
  57. <th>Śr</th>
  58. <th>Czw</th>
  59. <th>Pt</th>
  60. <th>Sob</th>
  61. <th>Nd</th>
  62. </tr>
  63.  
  64. <?php
  65. $j = $daysOfMonth + $firstDayOfMonth - 1;
  66. echo $j;
  67.  
  68. for ($i = 0; $i < $j; $i++)
  69. {
  70. if (($i < $firstDayOfMonth - 1) || ($i > $j)) {echo "<td bgcolor=\"transparent\"></td>"; continue;}
  71. if (($i % 7) == 0) {echo "</tr><tr>";}
  72. if (($i - $firstDayOfMonth + 2) == $dayOfMonth) {$color = "#ffb900";}
  73. if ($dayOfWeek == 6) {$color = "red";}
  74. else {$color = "#f6f6f6";}
  75.  
  76. echo "<td class=\"tdSzkolenia\" style=\"background: $color;\">$i</td>";
  77. }
  78. ?>
  79. </tbody>
  80. </table>


ok z wypełnieniem tabeli do końca sobie poradziłem. Prawidłowy i działający kod wygląda następująco:

  1. $year = date('Y');
  2. $monthNum = date('n');
  3. $daysOfMonth = date('t');
  4. $dayOfWeek = date('w');
  5. $dayOfMonth = date('j');
  6. $firstDayOfMonth = date('w', mktime(0, 0, 0, $monthNum, 1, $year));
  7.  
  8. if ( (isset($_GET['m'])) && (isset($_GET['y'])) )
  9. {
  10. $year = $_GET['y'];
  11. $monthNum = $_GET['m'];
  12. $daysOfMonth = date('t', strtotime(date($year."-".$monthNum."-01")));
  13. $dayOfWeek = date('w', strtotime(date($year."-".$monthNum."-01")));
  14. $firstDayOfMonth = date('w', mktime(0, 0, 0, $monthNum, 1, $year));
  15. }
  16.  
  17. if ($dayOfWeek == 0) {$dayOfWeek = 7;}
  18. if ($firstDayOfMonth == 0) {$firstDayOfMonth = 7;}
  19.  
  20. switch ($monthNum)
  21. {
  22. case 1: $monthName = "Styczeń"; break;
  23. case 2: $monthName = "Luty"; break;
  24. case 3: $monthName = "Marzec"; break;
  25. case 4: $monthName = "Kwiecień"; break;
  26. case 5: $monthName = "Maj"; break;
  27. case 6: $monthName = "Czerwiec"; break;
  28. case 7: $monthName = "Lipiec"; break;
  29. case 8: $monthName = "Sierpień"; break;
  30. case 9: $monthName = "Wrzesień"; break;
  31. case 10: $monthName = "Październik"; break;
  32. case 11: $monthName = "Listopad"; break;
  33. case 12: $monthName = "Grudzień"; break;
  34. }
  35. ?>
  36.  
  37. <table id="tableSzkolenia">
  38. <tbody>
  39. <tr id="head-row">
  40.  
  41. <?php
  42. $prevMonth = $monthNum - 1;
  43. $nextMonth = $monthNum + 1;
  44. $prevYear = $year;
  45. $nextYear = $year;
  46. if ($prevMonth == 0) {$prevMonth = 12; $prevYear--;}
  47. if ($nextMonth == 13) {$nextMonth = 1; $nextYear++;}
  48. ?>
  49.  
  50. <th class="zmiana left" style="height: 50px;" onclick='location.href="./szkolenia.php?m=<?php echo $prevMonth; ?>&y=<?php echo $prevYear; ?>"'><span class="fa fa-chevron-left icon-sm"></span></th>
  51. <th class="text-center" style="height: 50px; padding: 10px;" colspan="5"><?php echo $monthName." ".$year; ?></th>
  52. <th class="zmiana right" style="height: 50px;" onclick='location.href="./szkolenia.php?m=<?php echo $nextMonth; ?>&y=<?php echo $nextYear; ?>"'><span class="fa fa-chevron-right icon-sm"></span></th>
  53. </tr>
  54. <tr id="days-row">
  55. <th>Pon</th>
  56. <th>Wt</th>
  57. <th>Śr</th>
  58. <th>Czw</th>
  59. <th>Pt</th>
  60. <th>Sob</th>
  61. <th>Nd</th>
  62. </tr>
  63.  
  64. <?php
  65. $j = $daysOfMonth + $firstDayOfMonth - 1;
  66.  
  67. for ($i = 0; $i < $j; $i++)
  68. {
  69. $class = "tdSzkolenia";
  70.  
  71. if ($i < $firstDayOfMonth - 1) {echo "<td style=\"background: #f6f6f6;\"></td>"; continue;}
  72. if (($i % 7) == 0) {echo "</tr><tr>";}
  73.  
  74. if (($i - $firstDayOfMonth + 2) == $dayOfMonth)
  75. {
  76. $color = "#ffffff";
  77. $class = "tdSzkolenia today";
  78. }
  79. else {$color = "#e6e6e6";}
  80.  
  81. echo "<td class=\"$class\" style=\"background: $color;\">$i</td>";
  82. }
  83.  
  84. // Pętla wypełniająca tabelę do niedzieli, jesli miesiąc kończy się wcześniej
  85. $x = $daysOfMonth + $firstDayOfMonth;
  86. while (($x % 7) != 1)
  87. {
  88. echo "<td style=\"background: #f6f6f6;\"></td>";
  89. $x++;
  90. }
  91. ?>
  92. </tbody>
  93. </table>


teraz co mam zrobic zeby inna miesiace niz aktualny (po kliknieciu we wczesniejszy lub pozniejszy) zaczynal sie od pierwszego dnia, a nie od numeru dnia (np czwartek = 4)

Z Waszą ogromną pomocą sobie już poradziłem...

Temat do zamknięcia.
Go to the top of the page
+Quote Post
nospor
post 29.05.2018, 15:02:47
Post #4





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Cytat
Z Waszą ogromną pomocą sobie już poradziłem...
Zawsze do uslug smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 19:30