Search code examples
laravelphp-carbon

laravel Carbon calculate age at death (not till now)


get age till now() can use the code below

// Accessor for Age.
public function getAgeAttribute()
{
    return Carbon::parse($this->attributes['birth_date'])->age;
}

but what about if the person is dead ?

in the database [death_date] field stored null or yyyy-mm-dd

so how to calculate the age between birth date ~ death date

// Accessor for Age.
public function getAgeAttribute()
{
    if (!is_null($this->attributes['death_date']))
    {
        // how to calculate death_date - birth_date = realAge
        return $realAge;
    }

    return Carbon::parse($this->attributes['birth_date'])->age;
}

just in case someone view this post, here is my answer

// Accessor for Age.
public function getAgeAttribute()
{
    // return is_null($this->attributes['death_date'])
    //     ? Carbon::parse($this->attributes['birth_date'])->age
    //     : Carbon::parse($this->attributes['birth_date'])->diff(Carbon::parse($this->attributes['death_date']))->format('%y');

    // oh, Carbon will auto convert NULL to now(), so no need the upper code
    return Carbon::parse($this->attributes['birth_date'])->diff(Carbon::parse($this->attributes['death_date']))->format('%y');
}

Solution

  • you can solve it as the following:

    public function getAgeAttribute()
     {
     if (!is_null($this->attributes['death_date']))
     {
         $realAge = Carbon::parse($this->attributes['death_date'])->diff(Carbon::parse($this->attributes['birth_date']))->format('%y');
          return $realAge
      }
    
     return Carbon::parse($this->attributes['birth_date'])->age;
    }