PHP - kalendarz

DZIAŁANIE:
Maj 2012
PnWt ŚrCz PiSo Nd
123456
78910111213
14151617181920
21222324252627
28293031

Kod:

Ewentualne Objaśnienia:

Wszystkie możliwe parametry funkcji date znajdziecie na : http://pl.php.net/manual/pl/function.date.php .

Oto całkiem prosty skrypt generujący nam kalendarz z zaznaczeniem dzisiejszego dnia zobaczmy co się dzieje na przykład dla daty 8 Grudnia 2007 :
- określamy
    rok = 2007
    numer miesiąca = 12
    dni w miesiącu = 31
    dzień tygodnia = 6 (sobota - funkcja date z parametrem w zwraca niedzielę jako 0 )
    dzień miesiąca = 8
    pierwszy dzień miesiąca = czyli 1 grudnia 2007 to sobota więc zwraca 6
- jeżeli dzień tygodnia lub pierwszy dzień w miesiącu zwracają 0 czyli jest to niedziela - zamieniamy 0 na 7 ( łatwiej będzie dalej liczyć )
- określamy sobie polskie nazwy dla miesięcy
- wyświetlamy nagłówek kalendarza oraz 7 komórek ze skrótami nazw dnia tygodnia
- obliczamy $k czyli ile powtórzeń powinna wykonać pętla, czyli liczba dni w miesiącu + numer 1 dnia miesiąca ( bo nie zawsze jest tak, że pierwszy dzień miesiąca to poniedziałek, więc przed wyświetleniem 1 dnia w miesiącu należy wyświetlić jakieś puste pola ) - 1 aby nie zacząć wyświetlać o dzień za późno ( pętla pójdzie od $i = 0 więc nasz 8 Grudzień 2007 będzie wyświetlony przy $i = 5 a nie 6 )
- w pętli :
    - jeżeli $i jest mniejsza od pierwszego dnia miesiąca wyświetlamy po prostu puste komórki pokolorowane na biało, pętla rozpoczyna się od nowa
    - jeżeli liczba powtórzenia pętli jest podzielna bez reszty przez 0 należy zacząć wyświetlać nowy wiersz tabeli ponieważ "minęło już 7 dni" - dlatego między innymi też pętla zaczyna od $i = 7 a nie $i=1 co mogłoby się wydawać prostsze
    - jeżeli aktualny dzień przez, który przechodzimy w pętli czyli numer powtórzenia - numer pierwszego dnia miesiąca + 2 (bo "tracimy" 1 na tym, że $i zaczyna się od 0, oraz pierwszy dzień miesiąca czyli tutaj 6 to już numer dnia, od którego należy wypisywać dni ) jest równy sprawdzonemu na początku dniu miesiąca określamy sobie tło dla komórki jako żółte, w przeciwnym razie czyli dla innego dnia jako białe
    - wyświetlamy komórkę z odpowiednim tłem ( żółte albo białe ) oraz dzień
- po wszystkim zamykamy tabelę oraz gdzieś w kodzie wywołujemy sobie naszą funkcję wyświetlającą kalendarz.

Proste prawda :)