Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kahden daten erotus

Jamma [06.12.2005 00:19:50]

#

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.

Wizard [06.12.2005 00:37:51]

#

PHP:n Calendar antaa oikean vastauksen.

Baglair [06.12.2005 00:47:41]

#

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ä.

odys [06.12.2005 00:48:02]

#

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ää

?>

Juice [06.12.2005 01:20:03]

#

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 :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta