Se a qualcuno può interessare, ho fatto così... sarà ampiamente migliorabile ma funziona! Bye
Codice PHP:
//il metodo recupera le date del corso e restituisce nel formato
// "da giorno/mese a giorno/mese" se le date sono in sequenza
// "giorno/mese-giorno/mese" se le date non sono in sequenza
private function GetDateCorsoProgrammato(){
$query = "SELECT DATE_FORMAT(data_inizio, '%d/%m/%Y') as data_calendario FROM calendario_corsi
WHERE id_corso_programmato='".$this->id_corso_programmato."'
ORDER BY data_inizio
";
$result = $this->mysqli->query($query);
// se la query restituisce un solo risultato
// restituisco solo giorno/mese
if($result->num_rows==1){
$data = $result->fetch_object();
$explode_data = explode("/", $data->data_inizio);
$giorno = $explode_data[0];
$mese = $explode_data[1];
$anno = $explode_data[2];
$this->dati['date'] = $giorno."/".$mese;
$this->dati['anno'] = $anno;
}
//se le righe restituite sono più di una
elseif($result->num_rows>1){
while ($data = $result->fetch_object()){
//inserisco i risultati in un array
$date[] = $data->data_calendario;
}
//conto il numero di elementi dell'array
$count = count($date);
//imposto la variabile che dovrà indicare se le date sono in sequenza
$sequenza = 1;
//per ogni elemento dell'array di date controllo le date a coppie
//per verificare se sono in sequenza
for ($i=0; $i<$count; $i++){
//se il numero totale è pari
if($count %2==0){
$data1 = $date[$i];
$data2 = $date[$i+1];
}
//altrimenti all'ultimo giro del ciclo
//confronto la penultima data e l'ultima
else{
if($i == $count-1){
$data1 = $date[$count - 2];
$data2 = $date[$count-1];
}
else{
$data1 = $date[$i];
$data2 = $date[$i+1];
}
}
$controllo = $this->ControllaSequenzaData($data1, $data2);
//se controllo restituisce zero le date non sono in sequenza
if($controllo==0){
$sequenza = 0;
}
}
//se le date non sono in sequenza le elenco con un trattino
if($sequenza==0){
for($i=0; $i<$count; $i++){
$giorni_corso .= ($i==$count-1) ? substr($date[$i], 0, 5): substr($date[$i], 0, 5)."-";
$anno = substr($date[0], 6, 4);
}
}
// altrimenti le restituisco nel formato da a
else {
$giorni_corso = "dal ".substr($date[0], 0 , 5)." al ".substr($date[$count-1], 0, 5);
$anno = substr($date[0], 6, 4);
}
$this->dati['date'] = $giorni_corso;
$this->dati['anno'] = $anno;
}
}
//il metodo controlla che la data2 sia un giorno successivo a data1
// le date passate come parametro devono essere nel formato gg/mese/anno
private function ControllaSequenzaData($data1, $data2){
//esplodo le stringhe per dividere giorno, mese, anno
$explode_data1 = explode("/", $data1);
$giorno_data1 = $explode_data1[0];
$mese_data1 = $explode_data1[1];
$anno_data1 = $explode_data1[2];
$explode_data2 = explode("/", $data2);
$giorno_data2 = $explode_data2[0];
$mese_data2 = $explode_data2[1];
$anno_data2 = $explode_data2[2];
//traformo le date in timestamp
$timestamp_data1 = mktime(0, 0, 0, $mese_data1, $giorno_data1, $anno_data1);
$timestamp_data2 = mktime(0, 0, 0, $mese_data2, $giorno_data2, $anno_data2);
//se la data 2 è uguale alla prima è i secondi di un giorno restituisco 1
if($timestamp_data2 == ($timestamp_data1 + 86400)){
return 1;
}
else{
return 0;
}
}