Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Przedział daty zaznaczony w kalendarzu
Forum PHP.pl > Forum > PHP
Kamil Rybczyński
Witam,
chcę wykonać kalendarz, który wyświetli mi wszystkie dni z zakresu od - do ( wczytanego z bazy danych ) i zaznaczy to w kalendarzu.
Jak do tej pory udało mi się jedynie zrobić taki kalendarz, który wyświetla w kalendarzu datę początku i datę końca, natomiast nie mam pojęcia jak zrobić aby zaznaczone w kalendarzu były dni pomiędzy tymi datami.

Oto obecny kod:

  1. <?php
  2. include 'config.php';
  3.  
  4. function kalendarz($ile) {
  5. $znacznik = mktime(0, 0, 0, date("m")+$ile, 1);
  6. $iledni  = date("t", $znacznik);
  7. $start = date("w", $znacznik);
  8. $miesiac = date("m", $znacznik);
  9. $rok = date("Y", $znacznik);
  10. $miesiace = array(
  11. "Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec",
  12. "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"
  13. );
  14. $od = date("Y-m-d", mktime(0, 0, 0, $miesiac, 1, $rok));
  15. $do = date("Y-m-d", mktime(0, 0, 0, $miesiac, $iledni, $rok));
  16. $uzytestart = array();
  17. $uzyteend = array();
  18.  
  19. // sprawdzam miesiąc w tabeli:
  20. $wynik = mysql_query("SELECT DATE(terminstart) AS datastart, DATE(terminend) AS dataend FROM klienci WHERE terminstart OR terminend BETWEEN '$od' AND '$do'");
  21. while($wynik and $dane=mysql_fetch_assoc($wynik)) $uzytestart[] = $dane['datastart'] AND $uzyteend[] = $dane['dataend'];
  22.  
  23.  
  24. // rysuję kalendarz
  25. echo "<table border='1' cellspacing='0' cellpadding='2'><tr><td>";
  26. echo "<a href='{$_SERVER["PHP_SELF"]}?ile=".($ile-1)."'><<</a>";
  27. echo "</td><td colspan='5' align='center'>";
  28. echo $miesiace[$miesiac-1]." $rok</td><td align='right'>";
  29. echo "<a href='{$_SERVER["PHP_SELF"]}?ile=".($ile+1)."'>>></a>";
  30. echo "</td></tr>";
  31. echo "<tr style=\"background-color:#d2e767;\"><td>Nd</td><td>Pn</td><td>Wt</td><td>Śr</td>
  32. <td>Cz</td><td>Pt</td><td>So</td></tr>";
  33. echo "<tr align='right'>";
  34. if ($start>0) echo "<td colspan='$start'> </td>";
  35. else $pierwszy=true;
  36. for ($i=1;$i<=$iledni;$i++) {
  37. $dzien = date("w", mktime(0, 0, 0, $miesiac, $i, $rok));
  38. if ($dzien==0 and !$pierwszy) echo "</tr><tr align='right'>";
  39. $pierwszy = false;
  40.  
  41.  
  42. // tu jest wersja dla uzytej i pustej daty:
  43. if ((in_array(date("Y-m-d", mktime(0, 0, 0, $miesiac, $i, $rok)), $uzytestart)) OR (in_array(date("Y-m-d", mktime(0, 0, 0, $miesiac, $i, $rok)), $uzyteend))) {
  44. echo "<td style=\"background-color: #ff0000;\"><b>$i</b></td>"; // uzyta
  45. } else {
  46. echo "<td>$i</td>"; // pusta
  47. }
  48. }
  49. $koniec=7-($start+$iledni)%7;
  50. if ($koniec<>7) echo "<td colspan='$koniec'> </td>";
  51. echo "</tr></table>";
  52. }
  53. kalendarz((int)$_GET["ile"]);
  54. ?>


Z góry bardzo dziękuję za pomoc.
MMX3
Użyj Googla Luke!

Zapytaj frazą:
mysql date between

Pozdro
Kamil Rybczyński
Wydaje mi się, ze dwa zapytania do bazy w jednym małym kalendarzyku to trochę niezbyt oszczędne wyjście.

Jest już between, które zwraca z bazy klientów tych, którzy mają zarezerowane terminy na dany miesiąc.

Czy nie da się jakoś inaczej tego wykonać niż kolejnym zapytaniem do bazy?


Pozdrawiam.
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.