• User Newbie

    calcolo intervalo di tempo fra due date

    Buongiorno a tutti, stò cercando una funzione con la quale avere in ritorno la quantità di anni passati tra una data qualsiasi e la data di oggi. Avevo trovato di fare lo seguente:
    public function deltaData() {
    $this->a="$this->anno-$this->mese-$this->giorno";
    $datetime1 = new DateTime($this->a);
    $datetime2 = new DateTime('now');
    $interval = $datetime1->diff($datetime2);
    echo "differenza tra due date : " . $interval->format('%Y years')."<br>";
    }
    Questo funziona ma non è quelo che cerco, inserendo nel form la data di nascita, per es. "07-10-1957" mi stampa "differenza tra due date : 58 anni". Il problema è che il 58 non è integer e io voglio fare un if per sapere se la persona che completa la form ha 18 anni o più. Ringrazio in anticipo qualsiasi idea su come ottenere questo integer.


  • User Attivo

    Ciao osber e benvenuto nel ForumGT.
    Credo che questa funzione faccia al caso tuo
    http://php.net/manual/en/function.intval.php
    restituisce la parte intera della variabile


  • User Newbie

    Grazie per il suggerimento PietroR, ho visto la funzione intval() che ritorna la parte intera di un numero o di altro valore nella base indicata. Ho visto anche l'indicazione che non deve essere usata con oggetti (?), comunque ho provato e funziona, il codice è:
    public function deltaDataUno(){
    $this->a="$this->anno-$this->mese-$this->giorno";
    $datetime1 = new DateTime($this->a);
    $datetime2 = new DateTime('now');
    $interval = $datetime1->diff($datetime2);
    echo "differenza tra due date : " . $interval->format('%Y anni')."<br>";
    $interval = (intval($interval->format('%Y'),$base=10));
    if ($interval>=18){
    echo 'la persona inscritta è maggiorenne, ';
    }
    else {
    echo 'la persona inscritta e minorenne, ';
    }
    }
    Se dove c'è la riga "$interval = (intval($interval->format('%Y'),$base=10));" facciamo il cast e diventa così :
    "$interval = (int)$interval->format('%Y');" anche questo funziona e così evito di usare la funzione dove ci sono oggetti (dubbio che mi rimane).
    Nel fratempo avevo fatto una altra funzione per capire se al momento della inscrizione l'utente è maggiorenne, è funziona anche questa:
    private function controlloEta (){
    $d="d";
    $m="m";
    $Y="Y";
    $giorno_oggi= date($d);
    $mese_oggi= date($m);
    $anno_oggi= date($Y);
    if(($anno_oggi-$this->anno_nascita)>=18&&($mese_oggi-$this->mese_nascita)>=0&&($giorno_oggi-$this->giorno_nascita)>=0){
    $this->b=0;
    echo 'la funzione controlloEta dà come risultato che la persona è maggiorenne';
    }
    else {
    $this->b=1;
    exit("fine iscrizione motivo : utente minorenne");
    }
    }
    Grazie.