Prvo ne znam kako da se zahvalim na ovako iscrpnom objašnjenu
Iskreno, nadao sam se da će bar neko nešto spomenuti u vezi algoritama i mogućih načina realizacije ali ovako detaljnom opisu, pa čak i realizaciji, nisam sigurno
Stvarno ne znam šta bih mogao da kažem osim jedno veliko veliko hvala
Što se tiče konkretne realizacije ovog algoritma postoji nekoliko faktora zbog kojih će ona morati na kratko da se pomeri. Prvo, sistem koji sam osmislio za realizaciju kalendara na kojem do sada radim radi potpuno zadovoljavajuće što bi trebalo da znači da za sada nemam nameru da u okviru njega ubacujem bilo šta od algoritama koji su dati u tvojoj prethodnoj poruci. Njihovu implementaciju ću čuvati za realizaciju jedne klase "od nule" koja će sadržati upravo sve što je navedene u prikačenom header fajlu i naravno prilagođeno objektnom modelu.
Usput par komentara u vezi moje verzije kalendara. Naime, sistem po kome se kalendar realizuje je osmišljen da prilikom iscrtavanja kalendara za određeni mesec se vrši učitavanje svih nepokretnih praznika iz postojeće baze. Bilo je malo problematično naći dobar izvor naziva svih dana ali posle par napisanih konvertora sve je veoma brzo i kvalitetno pohranjeno u bazu.
Nakon što se u privremeni niz učita sadržaj relevantan za nepokretne praznike vrši se proračunavanje pokretnih praznika po sledećem principu. Naime, za sve praznike koji slede je moguće napraviti ofset vreme u odnosu na sam Uskrs (koji računam po tvom algoritmu) i taj ofset se čuva u bazi. Da bi se dobila tačna pozicija (po datumu i mesecu) za svaki od tih praznika koristim par funkcija koje su dostupne u okviru PHP-a a koje koriste Unix timestamp kao osnovu. Sreća pa očigledno novije verzije PHP-a potpuno eliminišu problem ograničenja mogućeg vreman od 1970. do 2035. godine. Jednostavno za svaki od praznika pročitam offset i oduzmem ili dodam broj dana u odnosu na poziciju Uskrsa u zavisnosti da li je offset negativan ili pozitivan.
Evo je lista praznika koji tako mogu da se odrede:
Mesne poklade - 8 dana pred početak Velikog posta (pada u nedelju)
Bele poklade - 1 dan pred početak Velikog posta (pada u nedelju)
Početak velikog posta - 7 nedelja pred Uskrs (pada u ponedeljak)
Sveti Teodor Komogovinski - Todorova subota - prva subota posle početka Velikog posta
Prvo Bdenije - 11 dana pred Cveti (pada u sredu)
Drugo Bdenije - 9 dana pred Cveti (pada u petak)
Lazarova subota - Vrbica - 7 dana pre Velike subote
Ulazak Gospoda Isusa Hrista u Jerusalim - Cveti - nedelju dana pred Uskrs
Veliki četvrtak - Veliko Bdenije
Veliki petak
Velika subota - kraj Velikog posta
Vaskrsenje Gospoda Isusa Hrista - Vaskrs
Vaskrsni ponedeljak
Vaskrsni utorak
Vaznesenje Gospodnje - Spasovdan - četrdeseti dan posle Uskrsa
Duhovske zadušnice - subota uoči Duhova (Pedesetnice, Trojice)
Silazak Svetog Duha na apostole - Pedesetnica - Trojice - sedam nedelja posle Uskrsa (pada u nedelju)
Duhovski ponedeljak
Duhovski utorak
Petrovske poklade - prva nedelja posle Duhova
Početak posta - prvi ponedeljak posle Petrovskih poklada
Preostalih pet praznika se po mojim saznanjima određuju isključivo po principu "prva subota pre Božića" i sl. To su sledeći praznici:
Oci - uvek je u prvu nedelju pre Božića. Ponekad se događa da se Oci prenose u prethodnu godinu što ume da bude problem
Materice - nedelju dana pre praznika Oci (taj praznik uvek dolazi iz sledeće godine)
Detinci - nedelju dana pre Materica (i taj praznik uvek dolazi iz sledeće godine)
Miholjske zadušnice - subota tačno uoči Miholjdana (12. oktobar)
Mitrovske zadušnice - subota tačno uoči Miholjdana (8. novembar)
Kod njih sam primetio da se svaki od tih praznika definiše rečenicom "subota uoči" ili "nedelja pre" tako da sam napravio algoritam koji pretražuje susedne dane unazad dok ne naleti na odgovarajući dan posle odgovarajućeg broja nedelja. I to odlično radi.
Još jednom hvala za iscrpna objašnjena