Tein hiljattain kalenterin, joka on toiminut tähän mennessä mukavasti eri sovelluksissa. Tänään huomasin bugin: jokaisen vuoden lokakuussa esiintyy yksi päivä kahteen kertaan. Tänä vuonna se on 29, ensi vuonna 28, vuonna 2008 se on 26, jne, ei jaksa miettiä mitään yhdistävää tekijää näiden välille. Kalenterini laskee vuorokauden 60*60*24-menetelmällä ja tuolla laskutoimituksella interpoloi (njääh) aikaleimaa eteenpäin ja muodostaa siltä pohjalta kalenterin vuosiksi eteenpäin. Mukamas. Kun muutin laskun muotoon 61*60*24, ongelma näennäisesti katosi, mutta odotan, että kalenterini alkaa jossain vaiheessa heittää. Pitkä aika siihen kyllä menee, mutta kumminkin. Kukaan muu huomannut ja/tai ratkaissut tätä ongelmaa?
Mietin vain, mahtaako tällä bugilla olla jotain tekemistä sen kanssa, että 60*60*24*365 ei ole eksakti vuosi; sitä vartenhan meillä on karkausvuosi kompensoimassa. Kai olisi aika paska nakki, jos koko php:n aikaleimasysteemi olisi viallinen.
Jotenkin tuntuu, että olisi helpompikin tapa tarkistaa päivämääriä kuin pelailla sekunteilla...
Etkö voisi laskea mieluummin toisin päin, eli päivämäärien mukaan rakentaa kalenterin. Php:lla on mahdollista tarkistaa montako päivää K kuukaudessa on vuonna V, mikä viikonpäivä tuo päivä P on, yms... ja sen mukaan luoda kalenterin ulkoasu.
edit:
Eli sikälimikäli luulen tietäväni, millainen kalenterisi on, niin...
tiedät että jokaisen kuukauden ensimmäinen pvm alkaa numerosta 1 ja loppuu date("t",mktime(...kuukausi vuosi...)) päivään.
ja viikonpäivän saat selville date("N",mktime(...kuukauden eka päivä + vuosi...), jonka avulla voit lähteä rakentamaan kalenteria.
PHP:ssä on luotettava kalenteri:
https://www.php.net/manual/fi/ref.calendar.php
...eli esimerkiksi lokakuu 2006 tulostuu näppärästi:
$counter = 1;
while ( $counter <= cal_days_in_month(CAL_GREGORIAN, 10, 2006) )
{
echo $counter;
$counter ++;
}
--W--
Aihe on jo aika vanha, joten et voi enää vastata siihen.