[php]Obliczanie daty

0

Nijak nie mogę wpść na pomysł jak zabrać się do zrobienia skryptu który liczyłby ile dni mieści się w podanym zakresie czasu a ile nie.

Np: mamy sobie okres od 1 listopada 2003r do 15 listopada 2004r,
jak to zrobić zeby skrypt liczyl mi ile dni z wprowadzonej daty zawiera się w tym okresie a ile nie, czyli np. z okresu między 10 listopada 2004 a 20 listopada 2004 5 dni mieści się między 1 a 15 list, a 5 się nie mieści.

Mam nadzieję że jasno wytłumaczyłem o co mi chodzi - biedzę się nad tym już dobrą chwilę i nie mogę nic wymyślić, więc jakby ktoś miał jakiś pomysł... :)

=============== DOPISANE =======================
w grę tu wchodzi jakaś matamatyka, a konkretnie wzór który pozwala obliczyć ile elementów zbioru A jest wspólnych z elementami zbioru B, przy założeniu że A i B należą do zbioru liczb całkowitych - czy jakoś tak... tyle się na razie dowiedziałem więc CZY SĄ TU JACYŚ MATEMATYCT??? [glowa]

0
$data_dzis = mktime(0,0,0,date("m"),date("d"),date("Y"));  #pobieranie aktualnej daty

$data_baza=strtotime("2003-11-01"); #data do porownania

# a tutaj <10 znaczy ze ta data musi byc mniejsza od 10 dni zeby zmienna $nowy przybrala wartosc "tak"
if (intval(($data_dzis-$data_baza)/(60*60*24))<10) then $nowy="tak"; else $nowy="nie";

pewnie o to Ci chodziło :)

pozdrawiam

0

np. z okresu między 10 listopada 2004 a 20 listopada 2004 5 dni mieści się między 1 a 15 list, a 5 się nie mieści.

Tu już w ogóle nie wiem o co Ci chodzi. Jak miedzy 10, a 20 miesci sie 5 dni ? Jak nadal nie masz odpowiedzi moge Ci pomoc, tylko dokladnie napisz na maila o co ci chodzi.
[email protected]

0

Mam cennik pobytu w hotelu, w zależności od pory roku klient płaci różną cenę za pokój. Skrypt ma liczyć tą cenę.
Przykładowy zestaw okresów cenowych:

$term1 = mktime(0,0,0,9,4,2003); 
$term11 = mktime(0,0,0,4,29,2004); // pobyt w tym okresie kosztuje powiedzmy 100 zł/dzień
//weekend 30,04,2004-2,05,2004
$term2 = mktime(0,0,0,4,30,2004);
$term22 = mktime(0,0,0,5,2,2004); // a w tym okresie np 150zł/dzień

... itd...

Nie ma problemu jeśli klient wybierze pobyt od 5.9.2003 do 10.9.2003 - wtedy za każdy dzień liczymy po 100 zł, ale jeśli zdecydyje się na okres od 27.4.2004 do 2.5.2004 to za okres do 29.4 płaci po 100 za dzień a od 29.04 po 15o zl/dzień.

Czyli musimy określić na jakie okresy cenowe przypadają wybrane przez klienta dni i po ile dni z czasu w jakim klient wybrał pobyt przypada na jaki okres cenowy

Ja rozwiązałem to w ten sposób:

function policz($p, $k, $P, $K) {
//$p - początek okresu który wybrał klient
//$k - koniec okresu który wybrał klient
//$P - początek okresu cenowego
//$K - koniec okresu cenowego

$p = (($p/60)/60)/24;
$k = (($k/60)/60)/24;
$P = (($P/60)/60)/24;
$K = (($K/60)/60)/24;
//powyżej zamieniamy date w formacie UNIX z sekund na dni które minęły od 1.1.1970r

settype($p, "int");
settype($P, "int");
settype($k, "int");
settype($K, "int");
//na wszelki wypadek zamieniamy liczbę dni na liczbę całkowitą

	while ($p < $k) {
		 $t[] = $p;
		 $p++;
//rzutujemywszystkie dni z okresu jaki wybrał klient do tablicy

	}
	foreach ($t as $v) {
		if(($v >= $P) && ($v <= $K)) {
		$wspolne[] = $v;
		}
	}
//w pętli porównujemy daty z okresu klienta z datamu okresu cenowego, => if(($v >= $P) && ($v <= $K)),
// i jeśli jakieś się pokrywają rzyutujemy do tablicy => wspolne[] = $v;

$dc = count($wspolne);
//liczymy elementy tablicy zawierającej pokrywające się daty
return $dc;
//i mamy liczbę dni wypadających w danym okresie cenowym :))
}

Procedurę tą powtarzamy dla każdego okresu cenowego...

I gra...

1 użytkowników online, w tym zalogowanych: 0, gości: 1