- Home
- Categorie
- Coding e Sistemistica
- Coding
- calcolo intervalo di tempo fra due date
-
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.
-
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
-
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.