【问题标题】:How to calculate the average age of users using their birth dates如何使用出生日期计算用户的平均年龄
【发布时间】:2018-04-12 22:27:45
【问题描述】:

我想使用用户的出生日期来计算用户的平均年龄。我有一个名为Member 的模型类,包括一个获取用户年龄的函数。

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;

class Member extends Model {
    public static function averageAge() {
        //What to do here
    }

    public function age() {
        $birthDate = Carbon::parse($this->birthDate);
        return $birthDate->diffInYears(Carbon::now());
    }
}

【问题讨论】:

  • 那么你对middle ages的定义是什么?
  • @MarkBaker 5 到 15 世纪?
  • 该列应声明为DATE

标签: php mysql sql laravel eloquent


【解决方案1】:

Carbon 具有一种计算日期“年龄”的方法,因此您可以在模型中执行此操作:

class Member extends Model
{
    protected $casts = [
        'birthDate' => 'date',
    ];

    public function getAgeAttribute()
    {
         return $this->birthDate->age;
    }
}

如果你想计算多个成员的平均年龄,那么我会创建一个类,它接受一个成员集合并返回该值:

class AverageAge
{
    public static function forMembers(Collection $members)
    {
        return $members->average(function ($member) {
            return $member->age;
        });
    }
}

然后你可以像这样使用它:

$members = Member::where(...)->get();

$averageAge = AverageAge::forMembers($members);

【讨论】:

  • 非常感谢。我还有一个关于表单请求中的日期的问题,它是 Carbon 对象还是我们必须解析它?
  • @BettyDM 没问题!表单请求中的任何内容都是字符串,因此如果您需要 Carbon 实例,则需要对其进行解析。
  • 不需要从当前日期减去出生日期得到年龄吗??
  • @RickJames 我真的不知道你在这个 4 岁的答案中指出了什么?根据答案,Carbon 库有 age 助手来获取特定日期与今天相比的年龄。这里没有手动减法,也没有任何其他操作。
猜你喜欢
  • 1970-01-01
  • 2019-01-29
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
相关资源
最近更新 更多