codice:
//data start prenotazione
$data = "28/06/2011";
list($dd, $mm, $yyyy) = explode('/', $data);
$start_pre = mktime(0,0,0,$mm, $dd, $yyyy);

//data stop prenotazione
$data = "02/06/2011";
list($dd, $mm, $yyyy) = explode('/', $data);
$stop_pre = mktime(0,0,0,$mm, $dd, $yyyy);

//date dei vari periodi
$data = "01/05/2011";
list($dd, $mm, $yyyy) = explode('/', $data);
$data1 = mktime(0,0,0,$mm, $dd, $yyyy);

$data = "30/06/2011";
list($dd, $mm, $yyyy) = explode('/', $data);
$data2 = mktime(0,0,0,$mm, $dd, $yyyy);

$periodo1 = array($data1, $data2, 50);

$data = "31/07/2011";
list($dd, $mm, $yyyy) = explode('/', $data);
$data3 = mktime(0,0,0,$mm, $dd, $yyyy);

$periodo2 = array($data2, $data3, 65);

$per = array($periodo1, $periodo2);

//calcolo
$costo = 0;
//calcolo su ogni giorno
while($start_pre<$stop_pre){
//controllo tutti i periodi finche trovo quello che mi serve
	foreach ($per as $value) {
		if($value[0]<$start_pre && $value[1]>=$start_pre){
//periodo trovato
//aumento il costo
			$costo += $value[2];
//aumento la data di 1 giorno.
			$start_pre += (60*60*24);
//fermo il ciclo non è necessario controllare oltre
			break;
		}
	}
}
//ho il costo totale
echo $costo;
dovrebbe funzionare, si può anche migliorare