Calcolo eta' da fixare

  • Creatore Discussione Creatore Discussione Alex_70
  • Data di inizio Data di inizio

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:
 
PHP:
$italianDate  = $row['birthday'];
if($italianDate != "0000-00-00"){
//codice che hai scritto finora
}else{
echo "Campo vuoto";
}
 
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>
 
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
 
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
 
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="" > ';
}
}
?>
 
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
 
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
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
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)
?>
 
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?
 
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?
 
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) 
 ?>
 
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

Discussioni simili