Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Scoprire se le date sono in sequenza

    Ciao!

    Ho un insieme di date prelevate da un db da un campo in formato datetime.

    Se le date sono una sequenza devo stampare

    "da $data_inizio a $data_fine"

    Altrimenti per ogni data dovrò stampare giorno1/mese1, giorno2/mese2, etc...

    Qual'è il modo più semplice di scoprire se sono in sequenza?

    Grazie
    Disegnatori e romanzieri d'Italia, visitate il mio sito, cerchiamo favolieri dark ed illustratori dark fantasy... http://www.neilgaimania.it

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Metti le date in un array. Poi in un altro array le ordini. Se i due array coincidono sono in sequenza, altrimenti no.

  3. #3
    Grazie del consiglio... ma non credo che funzioni...

    forse mi sono spiegato male.

    Non voglio sapere se le date sono ordinate (per quello posso usare un semplice ORDER BY), piuttosto voglio sapere se sono continue ovvero:

    27/05/08 28/05/08 29/05/08 sono continue
    23/05/08 28/05/08 29/05/08 no

    Nel primo caso stamperò su schermo dal 27 al 29 Maggio 2008, nel secondo 23, 28, 29 Maggio 2008.

    Grazie ancora.
    Disegnatori e romanzieri d'Italia, visitate il mio sito, cerchiamo favolieri dark ed illustratori dark fantasy... http://www.neilgaimania.it

  4. #4
    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], 05): substr($date[$i], 05)."-";
              
    $anno substr($date[0], 64);
            }
          }
          
    // altrimenti le restituisco nel formato da a
          
    else {
            
    $giorni_corso "dal ".substr($date[0], 5)." al ".substr($date[$count-1], 05);
            
    $anno substr($date[0], 64);
          }
          
          
    $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(000$mese_data1$giorno_data1$anno_data1);
        
    $timestamp_data2 mktime(000$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;
        }
      } 
    Disegnatori e romanzieri d'Italia, visitate il mio sito, cerchiamo favolieri dark ed illustratori dark fantasy... http://www.neilgaimania.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.