|
Ehk siis kuidas teada saada, millised päevad on kalendris "punased". Muidugi on võimalik riiklike pühede nimekiri ette võtta ja siis programmeerida oma rakendusse sisse kõigi nende väljaarvutamise. Aga see tundub liialt veaohtlik. Eriti kui osad pühad sõltuvad kuufaasidest ja jumal teab millest veel. Lisaks võib neid riigipühasid aja jooksul juurde tulla ja vähemaks jääda, parajasti nii kuidas riigikogu hääletada suvatseb. Ja lõppude lõpuks ei saa ma olla ainuke, kes seda riigipühade infot vajab. On ehk kellegil kogemusi? |
|
Tuli välja, et Eesti pühade jaoks see arvutus ei olegi väga keeruline. Allpool algoritmi realisatsioon PHP's. See töötab küll kuni aastani 2038 tänu unix timestamp'i piiratusele, kuid on lihtne teisendada teistesse keeltesse. Saab kasutada ka pühade nimekirja printimiseks valitud aasta(te)l. Tänud Rene'le, Harri'le ja Mattias'ele inspiratsiooni eest.
1
Muide, PHP-s on olemas funktsioon easter_date(), mis paistab tegevat täpselt seda mida Easter_Date_For_Year().
(Nov 23 '09 at 15:37)
Rene Saarsoo ♦♦
Suur tänu vihje eest, see teeb ülesande lahendamise PHP's eriti lihtsaks. Aga jätan lahenduse muutmata, kuna teistes keeltes ei pruugi sellist funktsiooni käepärast olla.
(Nov 24 '09 at 13:15)
Urmo Kaber ♦♦
Muidu kena, aga timestambi asemel võiks ehk kasutada DateTime klassi? http://www.php.net/manual/en/class.datetime.php
(Dec 02 '09 at 10:07)
Anti Veeranna
|
|
Uute riigipühade tulekuks valmistuda ju ei saagi. Liikuvate riigipühade arvutused on üpris keerulised. Näiteks suure reede jaoks tuleb leida lihavõtete pühapäev: http://www.assa.org.au/edm.html Kõige lihtsam variant oleks järgmise 100 aasta pühade tabel rakendusega kaasa panna, ja seda vajadusel täiendada. Kui see tabel ja juurdekäiv API Open Source'na avaldada, siis saab töövaeva teiste programmeerijatega jagada. Teoorias võiks sellest ka veebiteenuse teha, aga kuna tabel muutuks vähem kui iga paari aasta tagant, siis oleks serverite haldamine suurem töö kui rakenduse uuenduse välja andmine. |
|
Riigipühade nimekirjas on kaks liikuvat püha: Suur Reede ja Esimene Ülestõusmispüha. Kuna teine neist on alati pühapäeval, võib mõnedes rakendustes selle rehkendamisest olla võimalik mööda puigelda. Samas, mõlemad nendest pühadest haakuvad lihavõttepäeva külge; selle arvutamise algoritm on küll keeruline (Meie Ajaarvamises kasutatava aastate numeratsiooni mõtleski Dionysius Lühike just lihavõtterehkenduse jaoks välja), aga laialt tuntud ja Knuthis täiesti olemas. Vana hea SWAG'i leiab vajadusel veebist ka: EASTER.PAS. Suur Reede on täpselt kaks päeva enne Esimest Ülestõusmispüha. Mis tulevikukindlusse puutub, siis muud võimalust ei ole, kui rakenduse parameetrihulka paigaldada tabel, mis loetleb riigipühad -- enamiku absoluutkuupäevana, need kaks lihavõttepäeva suhtes relatiivsena -- ja nende kehtestamise ning tühistamise aastad. Eesti kontekstis on veel isegi lihtne, mõnel pool on erinevate arvutusreeglitega liikuvaid pühi rohkem. Näiteks minu allikad Moldovas räägivad situatsioonist, kus inimesed peavad nii ortodoksi kui katoliku lihavõtteid. Kuna lisaks kalendrivahele erineb ka ortodoksi täiskuu katoliku täiskuust, on segadust hulka. |
|
Minu arvates suht lihtne lahendus on hallata oma rakenduses tabelit RIIKLIKUD_PYHAD(RIIK,KUUP2EV) ja lisada aastavahetuse operatsioonide hulka kasutajatele ülesanne kontrollida, et selles tabelis on järgneva 3 aasta pühad korrektsed. Eelis on see, et ei ole vaja üldse oma pead vaevata sellega, mis valemi alusel need pühad on arvutatud (kui programm peab toetama üle paarikümne riigi, siis oleks see valemite kodeerimine päris keeruline ja samuti ei saa välistada, et mõnes riigis korraldatakse erakorraline riiklik püha, mis ajaks valemite alusel töötava süsteemi kohe sassi). Näiteks Eesti jaoks võiks keegi valmis teha ja publitseerida .csv faili vastavate pühadega aastatel 1900..2100 ja seda oleks siis lihtne importida kõigil kes sellist loogikat kasutada soovivad. Kuigi kiiruse huvides oleks mõistlik importida ainult see ajavahemik, mida reaalselt kasutatakse (tüüpiliselt käesolev ja järgmine aasta). |
|
|
|
php easter_date() olemasolust tean aga pole seni kasutanud. Mul on mõnede automaatselt loodavate trükiste tarbeks andmebaas, kus kõik liikumatute pühade kuupäevad on kujul 0000-mm-dd ja liikuvaid tuleb siis käsitsi lisada. Ülestõusmispühade kuupäevad võtan wikipediast (seal on paarkümmend aastat ees), selle järgi saab arvutada teised sellega seotud päevad Vastlapäevast Nelipühani. Peale selle on veel liikuvad Emadepäev ja Isadepäev. Oleks tõesti hea kui kusagil oleks üleval ammendav nimekiri, põhimõtteliselt ei ole programmis iga kord jooksvalt arvutamine eriti mõistlik sest tegu pole muutuvate andmetega. Omaette teema on Eestis esinevad kuufaasid, päiksetõusud/loojangud ja aastaaegade algused kellaajalise täpsusega. Tõravere observatoorium arvutab neid ja müüb kalendri tegijatele aga samahästi peaks ju olema võimalik ka ise välja arvutada... |

Hea näide küsimuse kohta, mida on mõtet küsida Pinu.ee-st ja mitte StackOverflow.com-st.