Eli koitin vääntää koodia joka kertoisi kahden daten erotuksen päivinä. Eli tätä haen:
30.01.2005 - 01.01.2005 = 29pvä.
Sain tehtyä jonkinmoista purkkaa:
<?php $tanaan = date("j.n.Y"); $kohde = "06.01.2006"; $data1 = explode('.', $tanaan); $data2 = explode('.', $kohde); $luku1 = (($data1[0] * 86400) + ($data1[1] * 2592000) + ($data1[2] * 31536000)); $luku2 = (($data2[0] * 86400) + ($data2[1] * 2592000) + ($data2[2] * 31536000)); $luku3 = $luku2 - $luku1; $luku4 = $luku3 / 86400; $luku4 = round($luku4, 2); echo "$luku4"; ?>
no pätkähän toimii halutulla tavalla, mutta mutta. Erittäin purkkaa ja varmaankin saa tehtyä helpommin. Vielä se, että laskutapa ei ota huomioon sitä että kaikissa kuukausissa ei ole samaa määrää päiviä. Jos jollain on tarjota parempaa ratkaisua tähän niin hienoa.
PHP:n Calendar antaa oikean vastauksen.
PHPtä en osaa mutta jos ideani auttaisi eli ensin tehdään semmoinen taulukko, jossa on lueteltuna kaikki kuukaudet ja niiden päivien määrät:
Kuu Päivät Tammi 31 Helmi 28 Maalis 31 Huhti 30 Touko 31 Kesä 30 Heinä 31 Elo 31 Syys 30 Loka 31 Marras 30 Joulu 31
Otetaan vaikka päivämäärät 12.10.2005 - 9.11.2005.
Tämän jälkeen lasketaan yhdeksän ensimmäisen kuukauden päivät yhteen ja lisätään tulokseen vielä 12. Saadaan päivämäärän 12.10 päivien määrä, joka on: 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 12 = 285pv.
Sitten tehdään sama juttu päivämäärälle 9.11.2005 eli otetaan 10 ensimmäisen kuukauden päivien määrät ja lisätään siihen 9: 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 9 = 313pv
Nyt seuraa viimeinen vaihe eli miinustetaan isommasta päivämäärästä pienmpi päivämäärä:
313pv - 285pv = 28pv
Huomioon pitää myös ottaa vuodet. Esimerkiksi jos pitää laskea päivämäärien 01.01.2005 - 01.01.2006 päivien ero toimit samalla tavalla:
Vuodessa on
31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 päivää = 365 päivää, joten:
2006 vuosi - 2005 vuosi = 1 vuosi = 365 päivää
Kannattaa myös muistaa karkausvuodet, jolloin helmikuuhun lisätään yksi päivä (28 + 1). Lisätietoa karkausvuosista täältä.
Oma versioni samasta asiasta.. Aikamoinen purkka tämäkin =)
<?php function laske_paivat($paiva1, $kuukausi1, $vuosi1, $paiva2, $kuukausi2, $vuosi2) { $aika1 = strtotime("$vuosi1-$kuukausi1-$paiva1"); $aika2 = strtotime("$vuosi2-$kuukausi2-$paiva2"); $erotus = $aika1 - $aika2; echo abs($erotus) / 86400 . " päivää"; } laske_paivat(4, 12, 2006, 4, 12, 2007); // 365 päivää ?>
Tässäpä vielä oma, oliopohjainen ratkaisuni. Idean tästä saa helposti:
<?php class Date { var $day; var $month; var $year; function Date($d,$m,$y) { $this->day = $d; $this->month = $m; $this->year = $y; } function difference($day) { $day1 = strtotime("{$this->year}-{$this->month}-{$this->day}"); $day2 = strtotime("{$day->year}-{$day->month}-{$day->day}"); return ($day2 - $day1) / 86400; } } #uusi Date-olio $d = new Date(6,12,2003); #kutsutaan olion difference-metodia. #Kätevää, jos samaa päivämäärää pitää vertailla useasti eri päivien kanssa. echo $d->difference(new Date(6,12,2004)); #366 (karkausvuosi) ?>
EDIT: Reloadi olis kiva muistaa, puoli tuntia oli tabi auki :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.