Berechnen Sie das Alter aus dem in der Datenbank in Ymd gespeicherten Datum mit Laravel 5.2

Lesezeit: 4 Minuten

Benutzeravatar von sanainfotech
Sanainfotech

Hallo, Benutzer fügen ihr Geburtsdatum über das Formular hinzu, das in der Datenbank gespeichert ist.

Ich möchte das Alter aus dem gespeicherten Datum in der Datenbank berechnen, die in diesem Format Ymd vorliegt,

Meine Frage ist :

  • Wie berechnet man das Alter?

  • Wohin mit der Logik, in Controller oder Model?

  • So übergeben Sie das gespeicherte Datum in diesem Format ‘mdY’

  • Wie man das Ergebnis der Logik weitergibt, die im Hinblick auf das Alter ist.

  • Ich verwende etwas wie unten in meinem Modell, ist das richtig?

Dies ist der Controller:

public function index()   {   
    $profile   = User::find($this->userid())->profiledetailsHasOne;  //This has Dob field                   
    return view('profile.index',['profile' => $profile ]); 
}

Das ist mein Modell:

public function getAge(){
    $this->birthdate->diff($this->attributes['dob'])
    ->format('%y years, %m months and %d days');
}

Das ist meine Ansicht:

<tr>
    <th>Age</th>
    <td>{{$profile->getAge()}}</td>
</tr>

Ist das richtig? Ich bekomme Fehler wie unten

Call to a member function diff() on null

Benutzeravatar von Florent B
Florent B.

Daten können Instanzen von Carbon sein, das eine Reihe hilfreicher Methoden bietet.

Importieren Sie in Ihrem Modell die Klasse Carbon:

use Carbon\Carbon;

Und definieren Sie einen Accessor:

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

Sie können dann anrufen age als wäre es ein normales Attribut. Zum Beispiel in einer Blade-Ansicht:

<p>{{ $user->age() }} years</p>

  • Da der Titel “… Laravel 5.2” sagt, könnte es hilfreich sein zu erwähnen, dass diese Methode immer noch mit Laravel 5.6 funktioniert und noch nicht in 5.7 getestet wurde, aber davon ausgegangen wird, dass sie dasselbe tun würde.

    – alex t

    18. Februar 2019 um 15:53 ​​Uhr

  • @alext Ich kann bestätigen, dass dies immer noch für Laravel 7.x funktioniert

    – Pathos

    23. Juni 2020 um 22:18 Uhr

  • Acessors sind besser definiert als public function getAgeAttribute() und dann müsste man nur anrufen {{ $user->age }}

    – sierflibble

    10. März um 15:47 Uhr

So zeigen Sie direkt in Ihrer Ansicht:

\Carbon\Carbon::parse($user->birth)->diff(\Carbon\Carbon::now())->format('%y years, %m months and %d days');

  • Das ist genau das, was ich gesucht habe +1

    – hassanrazadev

    26. Juni 2020 um 21:24 Uhr

  • Ich bekomme wie 0 Jahre, 0 Monate und 1 Tage

    – CodeGuru

    16. September 2020 um 3:48 Uhr

Ich habe diesen Code in meinem Modell hinzugefügt:

protected $appends = ['age'];

public function getAgeAttribute()
{
   return Carbon::parse($this->attributes['birthday'])->age;
}

In Laravel7:

$dateOfBirth="1990-01-01";
$years = \Carbon::parse($dateOfBirth)->age;
  
dd($years); // 31

Vielen Dank für Ihren Vorschlag.

Das war einfach und genial mit Carbon.

Ich habe diesen Code in Model hinzugefügt:

public function age() {
return $this->dob->diffInYears(\Carbon::now());
 }

  • @frvanhove Ich schaffe es auch, das Datumsformat ‘Ymd’ von der Datenbank zu ändern, um das Datum in diesem ‘dmY’ in Sicht zu übergeben. Ich platziere diesen Code in model public function getDOB(){ return $this->dob->format('d-m-Y'); }

    – Sanainfotech

    20. Februar 2016 um 15:17 Uhr


Benutzeravatar von Edu Ruiz
Ed Ruiz

Die Berechnung des Alters in Laravel erfolgt am besten mit dem Build in Carbon. In Laravel zurückgegebene Daten sind bereits in einem Carbon-Format.

Diese Logik sollte als Standard-Getter für Ihr Modell in das Modell aufgenommen werden.

public function getAge(){
    $this->birthdate->diff(Carbon::now())
         ->format('%y years, %m months and %d days');
}

Daraus ergeben sich „23 Jahre, 6 Monate und 26 Tage“

Probier das aus http://carbon.nesbot.com/docs/ docs für all die lustigen Dinge, die Sie damit machen können.

Angenommen, Sie verwenden Modelle in Ihrer Ansicht und da sollten Sie eine machen getAge() Funktion in diesem Modell.

Sie können Ihr Modell in der Ansicht als aufrufen $user->getAge()

  • @frvanhove Ich schaffe es auch, das Datumsformat ‘Ymd’ von der Datenbank zu ändern, um das Datum in diesem ‘dmY’ in Sicht zu übergeben. Ich platziere diesen Code in model public function getDOB(){ return $this->dob->format('d-m-Y'); }

    – Sanainfotech

    20. Februar 2016 um 15:17 Uhr


B. Benutzeravatar von Go
B. gehen

use App\User;
use Carbon\Carbon;

Route::get('/userage',function(){

    $user_info = User::find(1);
    // When  ( $table->date('birthday'); ) 
    $birthday = $user_info->birthday;
    $user_age = Carbon::parse($birthday)->diff(Carbon::now())->format('%y years, %m months and %d days');

    echo($user_age); 
});

1434040cookie-checkBerechnen Sie das Alter aus dem in der Datenbank in Ymd gespeicherten Datum mit Laravel 5.2

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy