dovrebbe funzionare, si può anche migliorarecodice://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;