Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] problem z wyswietlaniem dni w kalendarzu
airendriu
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.05.2007

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


Witam,
Mam problem z odpowiednim wyświetlaniem dni w kalendarzu. Wszystkie dni wyświetlają się od poniedziałku =/ to samo tyczy się następnych i poprzednich miesięcy wszystkie zaczynają się tak samo.




  1. <?
  2.  
  3. function wyswietl_grafik()
  4. {
  5.  
  6. $date = time();
  7. $day = date("d", $date);
  8. $month = date("m", $date);
  9. $year = date("Y", $date);
  10.  
  11.  
  12. $first_day = mktime(0,0,0,$month, 1, $year);
  13. $day_of_week = date("D", $first_day);
  14.  
  15.  
  16.  
  17. if (isset($_GET['calendarSetting'])) 
  18. {
  19.  
  20.  $dateComponents = explode("-",$_GET['calendarSetting']); 
  21.  
  22.  $month = $dateComponents[1];
  23.  $year = $dateComponents[0];
  24. }
  25.  
  26. else 
  27. {
  28.  
  29.  $dateComponents = getdate(); 
  30.  
  31.  $month = $dateComponents['mon'];
  32.  $year = $dateComponents['year'];
  33.  
  34. }
  35.  
  36.  
  37.  
  38.  
  39. if ( (($month < 8) && ($month % 2 == 1)) || (($month > 7) && ($month % 2 == 0)) ) { $days_in_month = 31; }
  40.  
  41. if ( (($month < 8) && ($month % 2 == 0)) || (($month > 7) && ($month % 2 == 1)) ) { $days_in_month = 30; }
  42.  
  43. if (($month == 2) && ($year % 4 == 0)) { $days_in_month = 29 ;}
  44. if (($month == 2) && ($year % 4 >= 1)) { $days_in_month = 28 ;}
  45.  
  46. if($month == 1) { $prevMonth=12; $prevYear=($year-1); } else { $prevMonth=($month-1); $prevYear=$year;}
  47. if($month == 12) { $nextMonth=1; $nextYear=($year+1); } else { $nextMonth=($month+1); $nextYear=$year;}
  48.  
  49.  
  50. echo "<table border="1" cellpadding="10" cellspacing="4" align="center" style="background: #aaa; color: #000; text-align: center" width="420">
  51. <tr>
  52. <td colspan="7" style="background: #ddd; color: #00d;"><strong><a href="?calendarSetting=$prevYear-$prevMonth"><<</a> $month, $year, <a href="?calendarSetting=$nextYear-$nextMonth">>> </strong></td>
  53.  
  54.  
  55. </tr>
  56. <tr>
  57. <td style="background: #eee; color: #000" width="60"><strong>Pon.</strong></td>
  58. <td style="background: #eee; color: #000" width="60"><strong>Wto.</strong></td>
  59. <td style="background: #eee; color: #000" width="60"><strong>Sro.</strong></td>
  60. <td style="background: #eee; color: #000" width="60"><strong>Czw.</strong></td>
  61. <td style="background: #eee; color: #000" width="60"><strong>Pia.</strong></td>
  62. <td style="background: #eee; color: #000" width="60"><strong>Sob.</strong></td>
  63. <td style="background: #eee; color: #000" width="60"><strong>Nie.</strong></td>
  64. </tr>";
  65.  
  66.  
  67. $day_count = 1;
  68. $day_number = 1;
  69.  
  70.  
  71.  
  72. while($day_number <= $days_in_month) 
  73. {
  74. if($day_number < $day) 
  75. {
  76. echo "<td style="background: #bbb; border: 2px solid #ccc; color: #000"><em><a href= >$day_number</em></td>";
  77. }
  78. elseif($day_number == $day) 
  79. {
  80. echo "<td style="background: #fff; border: 2px solid #555; color: #000"><strong><a href= >$day_number</strong></td>";
  81. }
  82. else 
  83. {
  84. echo "<td style="background: #ccc; border: 2px solid #ddd; color: #000"><a href=>$day_number </td>";
  85. }
  86.  
  87. $day_number++;
  88. $day_count++;
  89.  
  90. if($day_count > 7) 
  91. {
  92. echo "</tr><tr>";
  93. $day_count = 1;
  94. }
  95. }
  96.  
  97. while($day_count > 1 && $day_count <= 7) 
  98. {
  99. echo "<td></td>"; 
  100. $day_count++;
  101. }
  102.  
  103. echo "</tr></table>";
  104. };
  105.  
  106.  
  107. wyswietl_grafik();
  108.  
  109. ?>


Może ktoś pomóc??
Dzięki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Koshin
post
Post #2





Grupa: Zarejestrowani
Postów: 196
Pomógł: 0
Dołączył: 29.04.2002
Skąd: jesteś?

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


Pierwsza komórka w tabeli kalendarza jest u ciebie zawsze I dniem miesiąca, więc zawsze kalendarz zacznie się tak samo.
Sugeruje zmienić sposób wyświetlania dni w kalendarzu, nie wyświetlaj dni miesiąca, tylko dni tygodnia i odpowiednio zwiększaj liczbę dnia miesiąca.

początek:

poniedziałek, sprawdzasz czy 1 danego miesiąca to poniedziałek, jeśli nie, to przesuwasz się na wtorek
wtorek, sprawdzasz czy 1 danego miesiaca to wtorek, jesli nie, to przesuwasz się na środę itd...
jeśli dany dzień to 1 danego miesiąca, to lecisz dalej... i tak wszystkie dni...
brzmi skomplikowanie, ale kod zapewne jest prosty. Ja bym się za to tak zabrał. Zawsze możesz zerknąć na jakiś gotowy kalendarz, i zobaczyć jak to jest tam rozwiązane.
Go to the top of the page
+Quote Post
joebezucha
post
Post #3





Grupa: Zarejestrowani
Postów: 43
Pomógł: 1
Dołączył: 23.05.2007
Skąd: Gliwice

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


Tu masz funkcje która keidys napisałem...

Generuje tablice zawierająca 42 znaczniki czasu. Działa to na wzór typowych kalendarzy np. systemowego z Windows.

42 znaczniki czasu bo wyświetlane jest 6 wierszy po 7 dni...oczywiscie miesiac moze mieć max 31 dni więc pozostałe są uzupełnione z miesiąca poprzedniego i miesiąca nastepnego


  1. <?php
  2. // tworzy tablice 42 dni(znacznikow czasu) 
  3. //- dni zadanego miesiaca + dopelnienia na poczatku i koncu miesiaca
  4. public function CreateCalendarDays($month, $year)
  5. {
  6. // ustalenie dnia tygodnia zadanego miesiaca
  7. // w celu odpowiedniego dopelnienia pierwszego tygodnia
  8. // dniami poprzedniego miesiaca
  9. $weekStartDay=date("w",mktime(0,0,0,$month,0,$year));
  10. if($weekStartDay!=0)
  11. {
  12. $cal[0]=mktime(0,0,0,$month,-($weekStartDay-1),$year);
  13. }
  14. else
  15. {
  16. $cal[0]=mktime(0,0,0,$month,-6,$year);
  17. }
  18. for($i=1;$i<=41;$i++)
  19. {
  20. $cal[$i]=$cal[$i-1]+(24*3600);
  21. }
  22. // funkcja zwraca tabele 42 dni(znacznikow czasu) do wyswietlenia
  23. return $cal;
  24. }
  25. ?>
Go to the top of the page
+Quote Post
Koshin
post
Post #4





Grupa: Zarejestrowani
Postów: 196
Pomógł: 0
Dołączył: 29.04.2002
Skąd: jesteś?

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


Szczerze przyznam iż bardzo ciekawa funkcja. Można korzystać w komercyjnych projektach ?
Go to the top of the page
+Quote Post
joebezucha
post
Post #5





Grupa: Zarejestrowani
Postów: 43
Pomógł: 1
Dołączył: 23.05.2007
Skąd: Gliwice

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


tak...jesli zostawisz mi pod drzwiami papierowa torbę z milionem dolarów w nieznaczonych jednodolarówkach:)
Go to the top of the page
+Quote Post
Koshin
post
Post #6





Grupa: Zarejestrowani
Postów: 196
Pomógł: 0
Dołączył: 29.04.2002
Skąd: jesteś?

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


Twoje drzwi to te brązowe ?
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: 23.08.2025 - 07:50