« Ritorna al blog
Ritorna alla lista completa degli articoli
Mettiti alla prova: calcolo dell'età anagrafica di un impiegato - Parte 1 di 4
PHP - SFIDE - novembre 03, 2021In questo esercizio calcoleremo l'età anagrafica a partire dalla data di nascita. In PHP esistono molti modi per calcolare la differenza tra due date. Vediamo un esempio:
$date1 = date_create_from_format('Y-m-d', '1981-11-12');
$date2 = date_create_from_format('Y-m-d', date('Y-m-d'));
$diff = (array) date_diff($date1, $date2);
echo '<pre>'.print_r($diff,1).'</pre>';
// Output
/*
Array
(
[y] => 39
[m] => 11
[d] => 22
[h] => 0
[i] => 0
[s] => 0
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 14601
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
*/
Se volessimo ottenere solo l'età basterà utilizzare la proprietà y (year), in questo modo:
echo "<p>Età anagrafica: " . $diff['y'] . " anni.</p>";
// Output
// Età anagrafica: 39 anni.
Un altro modo è utilizzare la classe DateTime. Ad esempio:
$oggi = new DateTime(date('Y-m-d'));
echo "<p>Data odierna: " . $oggi->format('d/m/Y') . "</p>";
// Output:
// Data odierna: 03/11/2021
Per maggiori approfondimenti visitare la seguente pagina.
In questo esercizio copiare il seguente codice e inserirlo nel proprio editor preferito:
File start.php
<!-- Classe Impiegati -->
<?php require_once("classi/Impiegato.class.php"); ?>
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Esercizio: calcolo dell'età anagrafica di un impiegato</title>
</head>
<body>
<?php
$giovanni = new Impiegato('Giovanni', '2010-10-20');
$filippo = new Impiegato('Filippo', '2012-07-12');
$enrico = new Impiegato('Enrico', '2009-08-28');
$teresa = new Impiegato('Teresa', '2017-03-06');
$michele = new Impiegato('Michele', '2005-04-07');
$laura = new Impiegato('Laura', '2010-07-12');
$roberto = new Impiegato('Roberto', '2003-12-16');
$luisa = new Impiegato('Luisa', '2004-05-20');
$maria = new Impiegato('Maria', '2010-05-25');
$boris = new Impiegato('Boris', '2007-01-07');
$alice = new Impiegato('Alice', '2015-11-13');
$gennaro = new Impiegato('Gennaro', '2016-12-16');
$gianluca = new Impiegato('Gianluca', '2007-04-30');
$carlo = new Impiegato('Carlo', '2010-03-25');
// Stampa nome ed età dell'impiegato
// Da completare. Ad esempio:
// Giovanni ha 11 anni
// Filippo ha 9 anni
?>
</body>
</html>
Creare il file Impiegato.class.php e salvarlo nella cartella classi. La cartella classi deve trovarsi nella root del nostro progetto:
<?php
class Impiegati {
private $nome;
private $ddn;
function __construct($nome, $ddn){
$this->nome = $nome;
$this->ddn = $ddn;
}
public function get_nome(){
return $this->nome;
}
public function get_eta(){
// da completare
}
}
?>
La classe Impiegato ha due metodi:
- la proprietà $nome sta per nominativo dell'impiegato;
- la proprietà $ddn sta per data di nascita;
- Il metodo get_nome() restituisce il nominativo dell'impiegato;
- Il metodo get_eta() restituisce l'età anagrafica;
Utilizzando la guida PHP online dovrete utilizzare la classe DateTime e la classe DateInterval. La classe DateTime possiede il metodo diff per calcolare l'intervallo tra due date mentre con la classe DateInterval potrete formattare il risultato utilizzando la proprietà y.
Per completare il metodo get_eta() non va usata la funzione date_create_from_format() in quanto questa funzionalità è già contenuta nella classe DateInterval.
Completata la classe Impiegato.class.php dovrete verificare di aver svolto tutto correttamente. L'output finale sarà il seguente:
Giovanni ha 11 anni
Filippo ha 9 anni
Teresa ha 4 anni
Michele ha 16 anni
Laura ha 11 anni
Roberto ha 17 anni
Luisa ha 17 anni
Maria ha 11 anni
Boris ha 14 anni
Alice ha 6 anni
Gennaro ha 4 anni
Gianluca ha 14 anni
Carlo ha 11 anni
Per vedere la soluzione bisogna registrarsi al sito.
File Impiegato.class.php
<?php
class Impiegato {
private $nome;
private $ddn;
function __construct($nome, $ddn){
$this->nome = $nome;
$this->ddn = $ddn;
}
public function get_nome(){
return $this->nome;
}
public function get_eta(){
$date1 = new DateTime($this->ddn);
$date2 = new DateTime(date('Y-m-d'));
$age = $date2->diff($date1);
return $age->y;
}
}
?>
File finish.php
<!-- Classe Impiegati -->
<?php require_once("classi/Impiegato.class.php"); ?>
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Esercizio: calcolo dell'età anagrafica di un impiegato</title>
</head>
<body>
<?php
$giovanni = new Impiegato('Giovanni', '2010-10-20');
$filippo = new Impiegato('Filippo', '2012-07-12');
$enrico = new Impiegato('Enrico', '2009-08-28');
$teresa = new Impiegato('Teresa', '2017-03-06');
$michele = new Impiegato('Michele', '2005-04-07');
$laura = new Impiegato('Laura', '2010-07-12');
$roberto = new Impiegato('Roberto', '2003-12-16');
$luisa = new Impiegato('Luisa', '2004-05-20');
$maria = new Impiegato('Maria', '2010-05-25');
$boris = new Impiegato('Boris', '2007-01-07');
$alice = new Impiegato('Alice', '2015-11-13');
$gennaro = new Impiegato('Gennaro', '2016-12-16');
$gianluca = new Impiegato('Gianluca', '2007-04-30');
$carlo = new Impiegato('Carlo', '2010-03-25');
echo $giovanni->get_nome() . " ha " . $giovanni->get_eta() . " anni<br>";
echo $filippo->get_nome() . " ha " . $filippo->get_eta() . " anni <br>";
echo $teresa->get_nome() . " ha " . $teresa->get_eta() . " anni<br>";
echo $michele->get_nome() . " ha " . $michele->get_eta() . " anni<br>";
echo $laura->get_nome() . " ha " . $laura->get_eta() . " anni<br>";
echo $roberto->get_nome() . " ha " . $roberto->get_eta() . " anni<br>";
echo $luisa->get_nome() . " ha " . $luisa->get_eta() . " anni<br>";
echo $maria->get_nome() . " ha " . $maria->get_eta() . " anni<br>";
echo $boris->get_nome() . " ha " . $boris->get_eta() . " anni<br>";
echo $alice->get_nome() . " ha " . $alice->get_eta() . " anni<br>";
echo $gennaro->get_nome() . " ha " . $gennaro->get_eta() . " anni<br>";
echo $gianluca->get_nome() . " ha " . $gianluca->get_eta() . " anni<br>";
echo $carlo->get_nome() . " ha " . $carlo->get_eta() . " anni<br>";
?>
</body>
</html>