Calcolo eta' da fixare

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
Buongiorno a tutti,

ritorno con i miei piccoli quesiti che sono difficili per me ma non per questa comunita',

questo codice calcola l'eta' di una persona prendendo i dati dal campo birthday e l'anno attuale,

funziona benissimo ma il problema e che se metto il campo vuoto mi restituisce questo

0000-00-00 - 2020 anni

PHP:
<?php

$datanascita = $row['birthday'];

$dateOfBirth = $datanascita;
$today = date("Y-m-d");
$diff = date_diff(date_create($dateOfBirth), date_create($today));
 
?>

birthday1.png



quest'altra funzione visualizza la data in italiano, ma quando il campo e' vuoto restituisce questo

giovedì 01 gennaio 1970


PHP:
<?php // funzione per visualizzare la data in italiano

$italianDate  = $row['birthday'];
$timestamp = strtotime($italianDate);
$mesi = array(1=>'gennaio', 'febbraio', 'marzo', 'aprile',
                'maggio', 'giugno', 'luglio', 'agosto',
                'settembre', 'ottobre', 'novembre','dicembre');

$giorni = array('domenica','lunedì','martedi','mercoledì',
                'giovedì','venerdì','sabato');

list($sett,$giorno,$mese,$anno) = explode('-',date('w-d-n-Y', $timestamp));

echo $giorni[$sett],' ',$giorno,' ',$mesi[$mese],' ',$anno;
?>
il codice si dovrebbe fixare, non ne sono capace pero' :confused:
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
Ciao Tommy03,

ricevo errore :(

Campo vuoto
Fatal error: Call to a member function format() on null in E:\OSPanel\domains\localhost\cinema\cinema.php on line 413
line 413

PHP:
$a = $diff->format('%y');
interferisce con il codice sotto che mi sono dimenticato d'aggiungere :rolleyes:

ecco il codice completo

PHP:
<?php // code calcolo eta'


$datanascita = $row['birthday'];

if($datanascita != "0000-00-00"){

$dateOfBirth = $datanascita;
$today = date("Y-m-d");
$diff = date_diff(date_create($dateOfBirth), date_create($today));
}else{
echo "Campo vuoto";
}
 
?>

<?php // //ciclo switch
    
$a = $diff->format('%y');

switch($a) {
    case $a >= 10 && $a < 30 :
        $anni = '<font color="green">' . $a . '</font>';
        break;
    case $a >= 30 && $a < 40 :
        $anni = '<font color="blue">' . $a . '</font>';
        break;
    case $a >= 40 && $a < 50 :
        $anni = '<font color="orange">' . $a . '</font>';
        break;
    case $a >= 50 :
        $anni = '<font color="red">' . $a . '</font>';
        break;
    default :
        $anni = 'No data';       
}

?>
<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'];?> - <b><?php echo $anni; ?></b> anni</p>

<!-- funzione formato date esempio 1-->


<?php // funzione per visualizzare la data in italiano

$italianDate  = $row['birthday'];
$timestamp = strtotime($italianDate);
$mesi = array(1=>'gennaio', 'febbraio', 'marzo', 'aprile',
                'maggio', 'giugno', 'luglio', 'agosto',
                'settembre', 'ottobre', 'novembre','dicembre');

$giorni = array('domenica','lunedì','martedi','mercoledì',
                'giovedì','venerdì','sabato');

list($sett,$giorno,$mese,$anno) = explode('-',date('w-d-n-Y', $timestamp));

echo $giorni[$sett],' ',$giorno,' ',$mesi[$mese],' ',$anno;
?>

<br>
 

Tommy03

Utente Attivo
6 Giu 2018
469
46
28
17
Bassano del Grappa (VI)
Ciao, posso darti un consiglio?
Io mi trovo molto bene ad utilizzare Timestamp per gestire le date e, a parte questo problema che hai ora, anche in futuro potrebbe essere molto più semplice da usare.
In sostanza funziona così: i campi del database che devono contenere una data li converti da DATETIME a INT. Poi, se vuoi inserire una data basta che usi la funzione strtotime($data) che porta la data dal format normale a un numero INT, che è molto più facile da gestire, ad esempio se vuoi fare delle differenze per calcolare quanto tempo è passato.

Comunque, il tuo problema è che hai la funzione format fuori dall'if quindi se il campo è vuoto l'errore c'è perché la variabile $diff non è "disponibile".
Quindi dovresti fare così
PHP:
$datanascita = $row['birthday'];

if($datanascita != "0000-00-00"){

$dateOfBirth = $datanascita;
$today = date("Y-m-d");
$diff = date_diff(date_create($dateOfBirth), date_create($today));
$a = $diff->format('%y');
switch($a) {
case $a >= 10 && $a < 30 :
$anni = '<font color="green">' . $a . '</font>';
break;
case $a >= 30 && $a < 40 :
$anni = '<font color="blue">' . $a . '</font>';
break;
case $a >= 40 && $a < 50 :
$anni = '<font color="orange">' . $a . '</font>';
break;
case $a >= 50 :
$anni = '<font color="red">' . $a . '</font>';
break;
default :
$anni = 'No data';
}

}else{
$anni = "Campo vuoto";
}
?>
Fammi sapere
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
aggiustato il codice, e' sparito l'anno attuale ma ancora problemi,

riposto il codice perche' mancava la funzione birthday (caspita, l'eta' fa'brutti scherzi)

0000-00-00 non dovrebbe essere visibile

e neanche questo

giovedì 01 gennaio 1970

birthday2.png


PHP:
<?php // code calcolo eta' fixato by Tommy03


$datanascita = $row['birthday'];

if($datanascita != "0000-00-00"){

$dateOfBirth = $datanascita;
$today = date("Y-m-d");
$diff = date_diff(date_create($dateOfBirth), date_create($today));



// //ciclo switch
   
$a = $diff->format('%y');

switch($a) {
    case $a >= 10 && $a < 30 :
        $anni = '<font color="green">' . $a . '</font>';
        break;
    case $a >= 30 && $a < 40 :
        $anni = '<font color="blue">' . $a . '</font>';
        break;
    case $a >= 40 && $a < 50 :
        $anni = '<font color="orange">' . $a . '</font>';
        break;
    case $a >= 50 :
        $anni = '<font color="red">' . $a . '</font>';
        break;
    default :
        $anni = 'No data';      
}

}else{
$anni = "Campo vuoto";
}

?>
<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'];?> - <b><?php echo $anni; ?></b> anni</p>



<?php // funzione per visualizzare la data in italiano

$italianDate  = $row['birthday'];
$timestamp = strtotime($italianDate);
$mesi = array(1=>'gennaio', 'febbraio', 'marzo', 'aprile',
                'maggio', 'giugno', 'luglio', 'agosto',
                'settembre', 'ottobre', 'novembre','dicembre');

$giorni = array('domenica','lunedì','martedi','mercoledì',
                'giovedì','venerdì','sabato');

list($sett,$giorno,$mese,$anno) = explode('-',date('w-d-n-Y', $timestamp));

echo $giorni[$sett],' ',$giorno,' ',$mesi[$mese],' ',$anno;
?>

<br>


<?php //conteggio giorni per compleanno
    $birthday = isset($row['birthday']) ? $row['birthday'] : NULL;
    if($birthday !== NULL){
        $parts = explode('-', $birthday, 2);
        $birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
        $today = new DateTime('midnight today');
        if ($birth_date < $today) {
            $birth_date->modify("+1 Year");
        }
        $diff = $birth_date->diff($today);
        if ($diff->days > 0) {
            echo '<font color="red">' . $diff->days . '</font>'   . " day remaining for your birthday.";
        } else {
            echo '<b>' . '<font color="blue">' . '<span class="blink_text">' . "Happy birthday!" . '</span>' . '</font>' . '</b>' .'<img src="" > ';
        }
    }
?>
questo e' il codice funzionante con la data inserita e il compleanno di oggi

birthday3.png
 

Tommy03

Utente Attivo
6 Giu 2018
469
46
28
17
Bassano del Grappa (VI)
PHP:
<?php // code calcolo eta' fixato by Tommy03


$datanascita = $row['birthday'];

if($datanascita != "0000-00-00"){

$dateOfBirth = $datanascita;
$today = date("Y-m-d");
$diff = date_diff(date_create($dateOfBirth), date_create($today));



// //ciclo switch

$a = $diff->format('%y');

switch($a) {
case $a >= 10 && $a < 30 :
$anni = '<font color="green">' . $a . '</font>';
break;
case $a >= 30 && $a < 40 :
$anni = '<font color="blue">' . $a . '</font>';
break;
case $a >= 40 && $a < 50 :
$anni = '<font color="orange">' . $a . '</font>';
break;
case $a >= 50 :
$anni = '<font color="red">' . $a . '</font>';
break;
default :
$anni = 'No data';
}

}else{
$anni = "Campo vuoto";
$datanascita="";
}

?>
<p class="bioheading">Birthday</p><p class="biodata"><?php echo $datanascita;?> - <b><?php echo $anni; ?></b> anni</p>



<?php // funzione per visualizzare la data in italiano

$italianDate = $row['birthday'];
$timestamp = strtotime($italianDate);
$mesi = array(1=>'gennaio', 'febbraio', 'marzo', 'aprile',
'maggio', 'giugno', 'luglio', 'agosto',
'settembre', 'ottobre', 'novembre','dicembre');

$giorni = array('domenica','lunedì','martedi','mercoledì',
'giovedì','venerdì','sabato');

list($sett,$giorno,$mese,$anno) = explode('-',date('w-d-n-Y', $timestamp));
if($datanascita != "0000-00-00"){
echo $giorni[$sett],' ',$giorno,' ',$mesi[$mese],' ',$anno;
}else{echo "Campo vuoto";}
?>

<br>


<?php //conteggio giorni per compleanno
    $birthday = isset($row['birthday']) ? $row['birthday'] : NULL;
if($birthday !== NULL){
$parts = explode('-', $birthday, 2);
$birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
$today = new DateTime('midnight today');
if ($birth_date < $today) {
$birth_date->modify("+1 Year");
}
$diff = $birth_date->diff($today);
if ($diff->days > 0) {
echo '<font color="red">' . $diff->days . '</font>' . " day remaining for your birthday.";
} else {
echo '<b>' . '<font color="blue">' . '<span class="blink_text">' . "Happy birthday!" . '</span>' . '</font>' . '</b>' .'<img src="" > ';
}
}
?>
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
meglio adesso

continuo a visualizzare ancora questo anche se il campo birthday e' vuoto

giovedì 01 gennaio 1970
220 day remaining for your birthday.

birthday4.png
 

Tommy03

Utente Attivo
6 Giu 2018
469
46
28
17
Bassano del Grappa (VI)
PHP:
<?php // code calcolo eta' fixato by Tommy03


$datanascita = $row['birthday'];

if($datanascita != "0000-00-00"){

$dateOfBirth = $datanascita;
$today = date("Y-m-d");
$diff = date_diff(date_create($dateOfBirth), date_create($today));



// //ciclo switch

$a = $diff->format('%y');

switch($a) {
case $a >= 10 && $a < 30 :
$anni = '<font color="green">' . $a . '</font>';
break;
case $a >= 30 && $a < 40 :
$anni = '<font color="blue">' . $a . '</font>';
break;
case $a >= 40 && $a < 50 :
$anni = '<font color="orange">' . $a . '</font>';
break;
case $a >= 50 :
$anni = '<font color="red">' . $a . '</font>';
break;
default :
$anni = 'No data';
}

}else{
$anni = "Campo vuoto";
$datanascita="";
}

?>
<p class="bioheading">Birthday</p><p class="biodata"><?php echo $datanascita;?> - <b><?php echo $anni; ?></b> anni</p>



<?php // funzione per visualizzare la data in italiano

$italianDate = $row['birthday'];
$timestamp = strtotime($italianDate);
$mesi = array(1=>'gennaio', 'febbraio', 'marzo', 'aprile',
'maggio', 'giugno', 'luglio', 'agosto',
'settembre', 'ottobre', 'novembre','dicembre');

$giorni = array('domenica','lunedì','martedi','mercoledì',
'giovedì','venerdì','sabato');

list($sett,$giorno,$mese,$anno) = explode('-',date('w-d-n-Y', $timestamp));
if($row['birthday'] != "0000-00-00"){
echo $giorni[$sett],' ',$giorno,' ',$mesi[$mese],' ',$anno;
}else{echo "Campo vuoto";}
?>

<br>


<?php //conteggio giorni per compleanno
    $birthday = isset($row['birthday']) ? $row['birthday'] : NULL;
if($birthday !== NULL){
$parts = explode('-', $birthday, 2);
$birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
$today = new DateTime('midnight today');
if ($birth_date < $today) {
$birth_date->modify("+1 Year");
}
$diff = $birth_date->diff($today);
if($row['birthday'] != "0000-00-00"){
if ($diff->days > 0) {
echo '<font color="red">' . $diff->days . '</font>' . " day remaining for your birthday.";
} else {
echo '<b>' . '<font color="blue">' . '<span class="blink_text">' . "Happy birthday!" . '</span>' . '</font>' . '</b>' .'<img src="" > ';
}
}else{echo "";}
}
?>
Scusa avevo sbagliato ora dovrebbe funzionare
 
  • Like
Reactions: Alex_70

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
perfetto Tommy03
sei un vero maestro:), mi hai aiutato moltissimo, ti meritI una birra compresa di cena

GRAZIE ;)

adesso mi studio il codice per capire le differenze

spero che questo codice fixato sia utile ad altri

ecco il risultato finale testato con differenti eventi

birthday5.png

birthday6.png


birthday7.png


birthday8.png
 
  • Like
Reactions: Tommy03

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
Ho notato una cosa strana pero', se la persona e' deceduta ricevo il warning :rolleyes:

3 day remaining for your birthday.

si puo' sostituire con

3 day remaining for your anniversary.

ecco il codice rimanente per died (campo)

PHP:
<?php if(!empty($row['died'])) {

echo "<p class=\"bioheading\">DATE OF DEATH</p><p  class=\"biodata\">" . "<b>†", "&nbsp;", '<font color="red">'. $row['died'].'</font>' ,"</b>" . "</p>"; }

?>



<?php

// calcolo differenza anni tra birthday e died, utilizzata la function.substr, parte da 0 e finisce a 4
// restituisce anno
$var3 = $row['birthday'];
$var4 = $row ['died'];

if(!empty($row['died'])) {

echo "(deceased at age", "&nbsp;", '<font color="red">' , $var4 - substr($var3, 0, 4).'</font>' , ")"; }
//(deceased at age 33)
?>
 

Tommy03

Utente Attivo
6 Giu 2018
469
46
28
17
Bassano del Grappa (VI)
Questo per sostituire anniversary con birthday:
PHP:
<?php if(!empty($row['died'])) {
$bir_ann="anniversary";
}else{
$bir_ann="birthday";
}
if($row['birthday'] != "0000-00-00"){
if ($diff->days > 0) {
echo '<font color="red">' . $diff->days . '</font>' . " day remaining for your '.$bir_ann.'.";
} else {
echo '<b>' . '<font color="blue">' . '<span class="blink_text">' . "Happy birthday!" . '</span>' . '</font>' . '</b>' .'<img src="" > ';
}
}else{echo "";}

se la persona e' deceduta ricevo il warning
Cosa ti dice esattamente?
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
esempio questo:

questa attrice ' deceduta

3 day remaining for you birthday

birthday7.png

se e' deceduta vorrei questo

3 day remaining for your anniversary

se invece e' vivente invece il warning standard

3 day remaining for your birthday

si puo' fare?
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
E non funziona con il codice che ho scritto sopra? Se non funziona pubblica il codice completo
ecco il codice completo fixato fin ora

PHP:
<?php // code calcolo eta' fixato by Tommy03


$datanascita = $row['birthday'];

if($datanascita != "0000-00-00"){

$dateOfBirth = $datanascita;
$today = date("Y-m-d");
$diff = date_diff(date_create($dateOfBirth), date_create($today));



// //ciclo switch

$a = $diff->format('%y');

switch($a) {
case $a >= 10 && $a < 30 :
$anni = '<font color="green">' . $a . '</font>';
break;
case $a >= 30 && $a < 40 :
$anni = '<font color="blue">' . $a . '</font>';
break;
case $a >= 40 && $a < 50 :
$anni = '<font color="orange">' . $a . '</font>';
break;
case $a >= 50 :
$anni = '<font color="red">' . $a . '</font>';
break;
default :
$anni = 'No data';
}

}else{
$anni = "Campo vuoto";
$datanascita="";
}

?>
<p class="bioheading">Birthday</p><p class="biodata"><?php echo $datanascita;?> - <b><?php echo $anni; ?></b> anni</p>



<?php // funzione per visualizzare la data in italiano

$italianDate = $row['birthday'];
$timestamp = strtotime($italianDate);
$mesi = array(1=>'gennaio', 'febbraio', 'marzo', 'aprile',
'maggio', 'giugno', 'luglio', 'agosto',
'settembre', 'ottobre', 'novembre','dicembre');

$giorni = array('domenica','lunedì','martedi','mercoledì',
'giovedì','venerdì','sabato');

list($sett,$giorno,$mese,$anno) = explode('-',date('w-d-n-Y', $timestamp));
if($row['birthday'] != "0000-00-00"){
echo $giorni[$sett],' ',$giorno,' ',$mesi[$mese],' ',$anno;
}else{echo " ";}
?>

<br>


<?php //conteggio giorni per compleanno
    $birthday = isset($row['birthday']) ? $row['birthday'] : NULL;
if($birthday !== NULL){
$parts = explode('-', $birthday, 2);
$birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
$today = new DateTime('midnight today');
if ($birth_date < $today) {
$birth_date->modify("+1 Year");
}
$diff = $birth_date->diff($today);
if($row['birthday'] != "0000-00-00"){
if ($diff->days > 0) {
echo '<font color="red">' . $diff->days . '</font>' . " day remaining for your birthday.";
} else {
echo '<b>' . '<font color="blue">' . '<span class="blink_text">' . "Happy birthday!" . '</span>' . '</font>' . '</b>' .'<img src="" > ';
}
}else{echo "";}
}
?>




<?php if(!empty($row['died'])) {
 
 echo "<p class=\"bioheading\">DATE OF DEATH</p><p  class=\"biodata\">" . "<b>†", "&nbsp;", '<font color="red">'. $row['died'].'</font>' ,"</b>" . "</p>"; }
 
 ?>
 
 
 
 <?php

// calcolo differenza anni tra birthday e died, utilizzata la function.substr, parte da 0 e finisce a 4
// restituisce anno
$var3 = $row['birthday'];
$var4 = $row ['died'];

if(!empty($row['died'])) {
 
echo "(deceased at age", "&nbsp;", '<font color="red">' , $var4 - substr($var3, 0, 4).'</font>' , ")"; }
 //(deceased at age 33) 
 ?>
 

Tommy03

Utente Attivo
6 Giu 2018
469
46
28
17
Bassano del Grappa (VI)
Non avevi fatto le modifiche che ti avevo suggerito:
PHP:
<?php // code calcolo eta' fixato by Tommy03


$datanascita = $row['birthday'];

if($datanascita != "0000-00-00"){

$dateOfBirth = $datanascita;
$today = date("Y-m-d");
$diff = date_diff(date_create($dateOfBirth), date_create($today));



// //ciclo switch

$a = $diff->format('%y');

switch($a) {
case $a >= 10 && $a < 30 :
$anni = '<font color="green">' . $a . '</font>';
break;
case $a >= 30 && $a < 40 :
$anni = '<font color="blue">' . $a . '</font>';
break;
case $a >= 40 && $a < 50 :
$anni = '<font color="orange">' . $a . '</font>';
break;
case $a >= 50 :
$anni = '<font color="red">' . $a . '</font>';
break;
default :
$anni = 'No data';
}

}else{
$anni = "Campo vuoto";
$datanascita="";
}

?>
<p class="bioheading">Birthday</p><p class="biodata"><?php echo $datanascita;?> - <b><?php echo $anni; ?></b> anni</p>



<?php // funzione per visualizzare la data in italiano

$italianDate = $row['birthday'];
$timestamp = strtotime($italianDate);
$mesi = array(1=>'gennaio', 'febbraio', 'marzo', 'aprile',
'maggio', 'giugno', 'luglio', 'agosto',
'settembre', 'ottobre', 'novembre','dicembre');

$giorni = array('domenica','lunedì','martedi','mercoledì',
'giovedì','venerdì','sabato');

list($sett,$giorno,$mese,$anno) = explode('-',date('w-d-n-Y', $timestamp));
if($row['birthday'] != "0000-00-00"){
echo $giorni[$sett],' ',$giorno,' ',$mesi[$mese],' ',$anno;
}else{echo " ";}
?>

<br>


<?php //conteggio giorni per compleanno
    $birthday = isset($row['birthday']) ? $row['birthday'] : NULL;
if($birthday !== NULL){
$parts = explode('-', $birthday, 2);
$birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
$today = new DateTime('midnight today');
if ($birth_date < $today) {
$birth_date->modify("+1 Year");
}
$diff = $birth_date->diff($today);
if(!empty($row['died'])) {
$bir_ann="anniversary";
}else{
$bir_ann="birthday";
}


if($row['birthday'] != "0000-00-00"){
if ($diff->days > 0) {
echo '<font color="red">' . $diff->days . '</font>' . " day remaining for your '.$bir_ann.'.";
} else {
echo '<b>' . '<font color="blue">' . '<span class="blink_text">' . "Happy birthday!" . '</span>' . '</font>' . '</b>' .'<img src="" > ';
}
}else{echo "";}
}
?>




<?php if(!empty($row['died'])) {

echo "<p class=\"bioheading\">DATE OF DEATH</p><p class=\"biodata\">" . "<b>†", "&nbsp;", '<font color="red">'. $row['died'].'</font>' ,"</b>" . "</p>"; }

?>



<?php

// calcolo differenza anni tra birthday e died, utilizzata la function.substr, parte da 0 e finisce a 4
// restituisce anno
$var3 = $row['birthday'];
$var4 = $row ['died'];

if(!empty($row['died'])) {

echo "(deceased at age", "&nbsp;", '<font color="red">' , $var4 - substr($var3, 0, 4).'</font>' , ")"; }
//(deceased at age 33)
?>
Ora sono da telefono quindi potrei aver fatto qualche errore
 
  • Like
Reactions: Alex_70